From a3c14818fc4582118ec99782fc37c60a884a7896 Mon Sep 17 00:00:00 2001 From: "Matteo F. Vescovi" Date: Sun, 8 Jan 2017 12:21:19 +0100 Subject: [PATCH] New upstream version 0.1.22 --- INSTALL | 10 +- Makefile.in | 5 +- NEWS | 7 + README | 489 ++- TODO | 7 +- babl/Makefile.am | 38 +- babl/Makefile.in | 59 +- babl/babl-cache.c | 348 +++ babl/babl-conversion.c | 2 +- babl/babl-extension.c | 8 + babl/babl-fish-path.c | 88 +- babl/babl-fish-reference.c | 70 +- babl/babl-fish-stats.c | 433 --- babl/babl-fish.h | 1 - babl/babl-internal.h | 6 +- babl/babl-util.c | 7 - babl/babl-util.h | 4 - babl/babl-version.h | 2 +- babl/babl.c | 14 +- babl/base/Makefile.in | 1 + babl/base/pow-24.c | 57 +- babl/base/pow-24.h | 116 +- babl/base/util.h | 15 + config.guess | 143 +- config.h.in | 3 + config.sub | 38 +- configure | 106 +- configure.ac | 18 +- docs/Makefile.am | 21 +- docs/Makefile.in | 21 +- docs/graphics/Makefile.in | 1 + docs/graphics/babl-a4poster.png | Bin 11097 -> 34824 bytes docs/index-static.html.in | 5 - extensions/Makefile.am | 2 +- extensions/Makefile.in | 3 +- extensions/cairo-tables.h | 5027 ------------------------------- extensions/cairo.c | 140 +- extensions/fast-float.c | 327 +- extensions/float.c | 42 +- extensions/gegl-fixups.c | 16 +- extensions/gggl-lies.c | 4 +- extensions/gggl.c | 2 +- extensions/sse2-float.c | 14 +- extensions/two-table.c | 37 + install-sh | 23 +- ltmain.sh | 39 +- m4/libtool.m4 | 33 +- tests/Makefile.am | 1 - tests/Makefile.in | 31 +- tests/babl_fish_path_dhtml.c | 15 - tests/babl_fish_path_fitness.c | 54 +- tools/Makefile.am | 3 +- tools/Makefile.in | 22 +- tools/babl-gen-test-pixels.c | 4 +- tools/babl-verify.c | 19 + 55 files changed, 1765 insertions(+), 6236 deletions(-) create mode 100644 babl/babl-cache.c delete mode 100644 babl/babl-fish-stats.c delete mode 100644 extensions/cairo-tables.h delete mode 100644 tests/babl_fish_path_dhtml.c create mode 100644 tools/babl-verify.c diff --git a/INSTALL b/INSTALL index 1ca5875..c937773 100644 --- a/INSTALL +++ b/INSTALL @@ -1,5 +1,5 @@ -babl 0.1.18 +babl 0.1.22 Dynamic; any to any, pixel format conversion library. @@ -12,10 +12,10 @@ From a released version the following is the expected method of installation (or a variation on this theme): ------------------------------------------------------------ - foo$ wget ftp://ftp.gtk.org/pub/babl/0.1/babl-0.1.18.tar.bz2 - foo$ tar jxf babl-0.1.18.tar.gz - foo$ cd babl-0.1.18 - foo/babl-0.1.18$ ./configure && make && sudo make install + foo$ wget ftp://ftp.gtk.org/pub/babl/0.1/babl-0.1.22.tar.bz2 + foo$ tar jxf babl-0.1.22.tar.gz + foo$ cd babl-0.1.22 + foo/babl-0.1.22$ ./configure && make && sudo make install ------------------------------------------------------------ diff --git a/Makefile.in b/Makefile.in index 5186c19..98b34ed 100644 --- a/Makefile.in +++ b/Makefile.in @@ -194,8 +194,8 @@ CSCOPE = cscope DIST_SUBDIRS = babl extensions tests tools docs am__DIST_COMMON = $(srcdir)/INSTALL.in $(srcdir)/Makefile.in \ $(srcdir)/babl.pc.in $(srcdir)/config.h.in AUTHORS COPYING \ - NEWS README TODO compile config.guess config.sub install-sh \ - ltmain.sh missing + INSTALL NEWS README TODO compile config.guess config.sub \ + depcomp install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) @@ -374,6 +374,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/NEWS b/NEWS index a993e33..a885050 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,13 @@ the news section both in the README and the webpage. --> +2016-11-05 babl-0.1.22
+Added cache of profiled conversions, added HCY color model, some precision and +performance updated for fast paths. +
+2016-11-05 babl-0.1.20
+Fix run-time errors, leaks, and race conditions. Add conditional fast paths. +
2016-06-13 babl-0.1.18
Bugfix: take alpha threshold in consideration when processing floats in SSE2.
diff --git a/README b/README index 8fed1c2..dd22fe7 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -Babl-0.1.18 +Babl-0.1.22 Contents @@ -59,6 +59,12 @@ babl release. If there are significant improvements to babl when a GEGL release is done a babl release is most often put out just prior to the GEGL release. +2016-11-05 babl-0.1.22 + Added cache of profiled conversions, added HCY color model, some + precision and performance updated for fast paths. +2016-11-05 babl-0.1.20 + Fix run-time errors, leaks, and race conditions. Add conditional + fast paths. 2016-06-13 babl-0.1.18 Bugfix: take alpha threshold in consideration when processing floats in SSE2. @@ -383,23 +389,6 @@ components Cr A -HSLA - -components - - hue - saturation - lightness - alpha - -HSL - -components - - hue - saturation - lightness - HSVA components @@ -417,23 +406,6 @@ components saturation value -Y'CbCr709 - -components - - Y' - Cb - Cr - -Y'CbCrA709 - -components - - Y' - Cb - Cr - alpha - CMYK components @@ -485,6 +457,40 @@ components CIE H(ab) A +HSLA + +components + + hue + saturation + lightness + alpha + +HSL + +components + + hue + saturation + lightness + +Y'CbCr709 + +components + + Y' + Cb + Cr + +Y'CbCrA709 + +components + + Y' + Cb + Cr + alpha + Pixel formats RGBA double @@ -1528,55 +1534,18 @@ components u8 Y -HSLA double - -bytes/pixel - 32 -model - HSLA -components - - double hue - double saturation - double lightness - double alpha - -HSL double - -bytes/pixel - 24 -model - HSL -components - - double hue - double saturation - double lightness - -HSLA float - -bytes/pixel - 16 -model - HSLA -components - - float hue - float saturation - float lightness - float alpha - -HSL float +cairo-RGB24 bytes/pixel - 12 + 4 model - HSL + R'G'B' components - float hue - float saturation - float lightness + u8 B' + u8 G' + u8 R' + u8 PAD HSVA double @@ -1628,55 +1597,18 @@ components float saturation float value -Y'CbCr709 double - -bytes/pixel - 24 -model - Y'CbCr709 -components - - double Y' - double Cb - double Cr - -Y'CbCrA709 double - -bytes/pixel - 32 -model - Y'CbCrA709 -components - - double Y' - double Cb - double Cr - double alpha - -Y'CbCrA709 float - -bytes/pixel - 16 -model - Y'CbCrA709 -components - - float Y' - float Cb - float Cr - float alpha - -Y'CbCr709 float +B'aG'aR'aA u8 bytes/pixel - 12 + 4 model - Y'CbCr709 + R'aG'aB'aA components - float Y' - float Cb - float Cr + u8 B'a + u8 G'a + u8 R'a + u8 A CMYK double @@ -1741,55 +1673,6 @@ components u8 yellow u8 key -B'aG'aR'aA u8 - -bytes/pixel - 4 -model - R'aG'aB'aA -components - - u8 B'a - u8 G'a - u8 R'a - u8 A - -cairo-ARGB32 - -bytes/pixel - 4 -model - R'aG'aB'aA -components - - u8 B'a - u8 G'a - u8 R'a - u8 A - -cairo-RGB24 - -bytes/pixel - 4 -model - R'G'B' -components - - u8 B' - u8 G' - u8 R' - u8 PAD - -cairo-A8 - -bytes/pixel - 1 -model - YA -components - - u8 A - CIE Lab double bytes/pixel @@ -1925,141 +1808,135 @@ components float CIE H(ab) float A +HSLA double + +bytes/pixel + 32 +model + HSLA +components + + double hue + double saturation + double lightness + double alpha + +HSL double + +bytes/pixel + 24 +model + HSL +components + + double hue + double saturation + double lightness + +HSLA float + +bytes/pixel + 16 +model + HSLA +components + + float hue + float saturation + float lightness + float alpha + +HSL float + +bytes/pixel + 12 +model + HSL +components + + float hue + float saturation + float lightness + +Y'CbCr709 double + +bytes/pixel + 24 +model + Y'CbCr709 +components + + double Y' + double Cb + double Cr + +Y'CbCrA709 double + +bytes/pixel + 32 +model + Y'CbCrA709 +components + + double Y' + double Cb + double Cr + double alpha + +Y'CbCrA709 float + +bytes/pixel + 16 +model + Y'CbCrA709 +components + + float Y' + float Cb + float Cr + float alpha + +Y'CbCr709 float + +bytes/pixel + 12 +model + Y'CbCr709 +components + + float Y' + float Cb + float Cr + +cairo-ARGB32 + +bytes/pixel + 4 +model + R'aG'aB'aA +components + + u8 B'a + u8 G'a + u8 R'a + u8 A + +cairo-A8 + +bytes/pixel + 1 +model + YA +components + + u8 A + Shortcut Coverage The diagram shown below visualizes the coverage of current shortcut conversions. Dots indicate a direct conversion is provided for, the height of the bar indicates the number of conversions steps needed in a -chain of conversions. A DHTML version is also available. - - - ▂·▃▂·▁▂▁ ▃▂ ·· ·▂ ▂▃ ▃ ·· ▁▂▂▃▃▂▃▂▃▂▃ ▃▂ ▃ ▁▁▁▂▂▂▂▁▂▁▂▃▂▂▃▂·· ·· ·· ·· ▃▃ ····▂▁▂ ── 0 RGBA double - ── 1 RGB double - ── 2 RaGaBaA double - ── 3 R'G'B' double -▂ ▃▂▁▁▂▃▂ ▂▁ ▃▃ ▃▃ ▃ ▃▃ ·▁▁▂▂▁▂▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ── 4 R'G'B'A double -· ▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃ ▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▃▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ── 5 R'aG'aB'aA double -▁ ▁ ···▁▁ ▁▁ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▁▁▁···▂▃▂▃ ▃▂ ▃ ▁▁·▁▂▁▁▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▁· ▂▂▂▂▁▁▂ ── 6 R'G'B' u8 -▁ ▁▂ ·▁▂▁ ▂▁ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ··▁▂▂▁▁▂▃▂▃ ▃▂ ▃ ▁▁▁▂▂▁▂▁▂▁▂▃▂▂ ▂▂▂ ▂▂ ▂▂ ▂▂ ▃· ▂▂▂▂▂▁▂ ── 7 R'G'B'A u8 -· ▁▁▂ ·▁· ▂▁ ▁▁ ▁▁ ▁▂ ▂ ▁▁ ·▁▁▂▂▁▂▁▂▁▂▃▂▂▃▂ ···▁▁▁▁·▁·▁▂▁▁▂▁▁▁ ▁▁ ▁▁ ▁▁ ▃▂ ▁▁▁▁▁·▁ ── 8 RGBA float -▁ ▂▂▁▂ ·▁ ▁▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▁▂▂·▁▂▃▂▃ ▃▃ ▃ ▁▁·▁▁··▁▂▁▃▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▂ ▂▂▂▂·▁▂ ── 9 RGB float -▂ ▃▃▂▃▁ ▂ ▂▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▂▃▃▁▂▃ ▃ ▃ ▃ ▂▂▁▂▂ ▁▃▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▁▂▃ ──10 RGB half -▁ ▂▂▃▂·▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▃▂▃▂▃ ▃▃ ▃ ▁▁▁▂▂▂▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──11 RGBA half - ──12 RaGaBaA half -▃ ▂ ▁▂▂▁▂▃ ▂ ▁▂▁▂▂· ▃▃▂▃▃▂▂▃ ▃ ▃ ▃▂ ▂▃ ──13 R'G'B' half -▂ ▁▃▂▁▁▂▃▂ ▃▃ ▃▃ ▃ ▃▃ ·▁▁▂▂▁▂▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──14 R'G'B'A half - ──15 R'aG'aB'aA half - ──16 RGB u15 - ──17 RGBA u15 - ──18 RaGaBaA u15 - ──19 R'G'B' u15 - ──20 R'G'B'A u15 - ──21 R'aG'aB'aA u15 - ──22 RGB u32 - ──23 RGBA u32 - ──24 RaGaBaA u32 - ──25 R'G'B' u32 - ──26 R'G'B'A u32 - ──27 R'aG'aB'aA u32 -· ▃▁▂▃▁▂▃▂ ▃ ▁ ▁▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃ ▃ ▃ ▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──28 Y double -· ▃▁▂▃▁▂▃▂ ▃ ▁ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃ ▃▂ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──29 YA double - ──30 YaA double - ──31 Y' double - ──32 Y'A double -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──33 Y'aA double -▂ ▃▃▃▃▁▂▃▂ ▃ ▃ ▂▂ ▃ ▃▃ ▂▃▃▃▃▃ ▁▂▂▂▃▃▂▃▃ ▂▂▂▃▃▃▃·▁▁ ▂▂▁▂▂▃▃ ▃▃ ▃▃ ▃▃ ▃ ▃▃▃▃▃▂▁ ──34 YA half - ──35 YaA half -▃ ▃▃▂▁▂▃ ▃ ▂ ▃ ▂ ▃ ▃ ▃▂▃▂▂▁▃▃▂▃▃▂ ▃▃▂▃▃▂▂▁▁·▂▂ ▂▂▁ ▃▂ ▂▃▂ ──36 Y half -▃ ▂ ▃▂▂▃ ▃ ▃▂ ▂ ▂ ▁▂▂▃▃▂▃·▁▁ ▃▂▁▂▂ ▃▃▃ ▃▁▂▂▂▃▃▂▃▃ ▃ ▃▂ ──37 Y'A half - ──38 Y'aA half - ▃ ▂▃▃▂▃ ▂▃ ▃ ▂▂ ▂▃▂▃▃▁▂▁▁·▂▂▁▂▂▁ ▃ ▃▃▂▂▁▃▃▂▃▃▂ ▃▃ ▃ ▃ ──39 Y' half - ──40 YA u15 - ──41 YaA u15 - ──42 Y u15 - ──43 Y'A u15 - ──44 Y'aA u15 - ──45 Y' u15 - ──46 YA u32 - ──47 YaA u32 - ──48 Y u32 - ──49 Y'A u32 - ──50 Y'aA u32 - ──51 Y' u32 -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──52 Y'CbCr double -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──53 Y'CbCrA double - ──54 Y'CbCr u8 -▁ ·▂▁··▁▂▁ ▁· ▂▂ ▃▂ ▂▃ ▃ ▂▂ ··▁▁·▁▂▃▂▃ ▃▂ ▃ ▁▁▁▂▂▂▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▂▁ ▂▂▂▂▂▁▂ ──55 R'G'B'A float -▂ ▁▃▂▁▁▂▃▂ ▂▁ ▃▃ ▃▃ ▃ ▃▃ ·▁▁▁▁▃ ▃ ▃ ▃ ▂▂▂▃▃▂▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──56 R'G'B'A u16 -▂ ▁ ▂▁▁▂▃▂ ▂▁ ▃▃ ▃▃ ▃ ▃▃ · ··▁▂▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▁▂ ▃▃▃▃▃▂▃ ──57 R'aG'aB'aA float -▃ ▂ ▃▂▂▃▃▃ ▃▂ ▃▃ ▃▃ ▃ ▃▃ ▁▂ ·▂▂▃ ▃ ▃ ▃ ▃▃▃▃▃▃▃▃▃▃▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▁▃ ▃▃▃▃▃▃▃ ──58 R'aG'aB'aA u16 -▃ ▂ ▂▃ ▃ ▃▂ ▁▂· ▂▂ ▃▃▃ ▃▃▃▃ ▃ ▃ · ▃ ──59 R'aG'aB'aA u8 -▂ ▁▃·▁▁·▁▂ ·▁ ▃▃ ▃▃ ▃ ▃▃ ·▁·▁ ·▃ ▃ ▃ ▃ ▂▂▁▂▂▁▁▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▂▁ ▃▃▃▃▁▂▃ ──60 R'G'B' float -▃ ▂ ·▁▂▁▂▃ ▁▂ ▁▂▁▂▁ ▃▃▂▃▃▃▂▃ ▃ ▃ ▃▁ ▂▃ ──61 R'G'B' u16 -▂ ▁▃▂▁▁▂▃▂ ▂▁ ▃▃ ▃▁ ▂· ▁ ▃▃ ·▁▁▂▂▁ ···▂▁·▁▁ ▂▂▂▃▃▃▃·▁▁▁▂▂▁▂▂▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▃▂▁ ──62 Y'A float -▃ ▂ ▃▂▂▃ ▃ ▃▂ ▂ ▃▁ ▂ ▁▂·▁▁▂▃ ▁▁▁▂▁·▂ ▃▃▃ ▃▁▂▂▂▃▃▂▃▃ ▂▃ ▃▂ ──63 Y'aA float -▃ ▂ ▁▂▂▁▂▃ ▁▂ ▂ ▁▁ · ▁▂▁▂▂·▁· ▁▁·▁▁· ▃▃▂▃▃▂▂▁▁·▂▂▁▂▂▁ ▃▂ ▂▃▂ ──64 Y' float -▃ ▂ ▃▃▂▃ ▃ ▃▂ ▃▂ ▃▁ ▂ ▁▂▂▃▃▂▂·▂ ▃▂·▃▃ ▃▃▃ ▃▃▃▁▂▂▂▃▃▂▃▃ ▃▃ ▃▂ ──65 Y'A u16 - ▃ ▃▃ ▃ ▂ ▃ ▂▃▁▂▂▃ ▁·▂ ▃▂▁▃ ▃ ▃ ▃ ──66 Y'aA u16 - ▃ ▃▃▃▂▃ ▂▃ ▃ ▂▂ ▁ ▂▃▂▃▃▁▃▁▁·▂ ▃▃· ▃ ▃▃▂▂▁▃▃▂▃▃▂ ▂▃ ▃ ▃ ──67 Y' u16 -▁ ▂▂▃▂·▂▂▁ ▃▂ ▂▂ ▃▁ ▂▁ ▂ ▂▃ ▁▃▂▃▃▂▂·▁▁·▃ ▂▂ ▁▁▁▂▂▁▃·▁▁▁▂▂▁▂▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▃▂▂▂▃▂▁ ──68 Y'A u8 - ▃ ▃ ▃ ▃ ▂ ▃ ▂▃▁▂▂▃ ▁·▂▂·▃ ▃▃▃ ▃ ▃ ──69 Y'aA u8 -▁ ▃▂▂▃·▁▂▁ ▂▃ ▂▂ ▂▂ ▁▂ ▁ ▂▂ ▂▃▂▃▃▁▃▁▁·▃▃·▂ ▁▁▁▂▂▁▂▁▁·▂▂▁▂▂▁▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──70 Y' u8 -▃ ▂ ▁▂▂▁▂▃ ▁▂ ▁▂▁▂▂·▁ ▃▃▂▃▃▂▂▃ ▃ ▃ ▃▂ ▂▃ ──71 Y'CbCr float -▂ ▁▃▂▁▁▂▃▂ ▂▁ ▃▃ ▃▃ ▃ ▃ ·▁▁▂▂▁▂▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──72 Y'CbCrA float -▁ ▂▂▃▂·▁▂▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▂▂▃▂▃ ▃▃ ▃ ▁·▁▂▁▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──73 RGBA u16 -▁ ▂▂▃▂·▁▂▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▂▂▃▂▃ ▃▂ ▃ ·▁▁▁·▁▂▂▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──74 RGBA u8 -▁ ▂▂▃▂·▁▂▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▃▂▃▂▃ ▃▂ ▃ ▁ ··▂▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──75 RaGaBaA float -▂ ▃▃▂▃▁▂▃▂ ▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▃▃▃▃▃▃ ▃ ▃ ▃ ▂▂ ·▂▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──76 RaGaBaA u16 -▂ ▃▃▂▃▁▂▃▂ ▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▃▃▃▃▃▃ ▃ ▃ ▃ ▂ · ▂ ▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──77 RaGaBaA u8 -▂ ▃▃▂▃▁·▁▂ ▂▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▂▃▃▁▃▃ ▃ ▃ ▃ ▂▁▁▂ ·▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▁▂▃ ──78 RGB u16 -▁ ▂▃▂▂··▁▁ ▂▂ ▂▂ ▂▂ ▂▃ ▃ ▂▃ ▁▂▂▃▃▁▂▂▃▂▃ ▃▃ ▃ ▁··▁· ▁▂▁▂▃▂▃▃▂▂▃ ▂▂ ▂▂ ▂▂ ▃▃ ▃▃▃▃▁▁▂ ──79 RGB u8 -▁ ▂▂▃▂·▁▂▁ ▃▂ ▂ ▃· ▁▁ ▂ ▂▂ ▁▂▂▃▃▂▃·▁▁▁▃▂▁▂▂ ▁▁▁▂▂▂ ···▁▁·▁▁▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁· ──80 YA float -▂ ▃▃▃▃▁▂▃▂ ▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▃▃▃▃ ▃▃▃▂▃▃▂▃▃ ▂▂·▁▁▃▃ ▂▁·▂▁·▂▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──81 YaA float -▂ ▃▃▂▃▁·▁▂ ▂▃ ▃ ▃▁ ·▂ ▁ ▃▃ ▂▃▂▃▃▁▂▁▁·▂▂▁▂▃▁ ▂▂▁▂▂▁▁· ▁▁·▁▁·▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▁▂▁ ──82 Y float -▂ ▃▃▃▃▁▂▃▂ ▃ ▃▃ ▃▁ ▂▂ ▃ ▃▃ ▂▃▃▃▃▃▃▁▃▂▂▃▃▂▃▃ ▂▂▂▃▃▂▃·▁ ▂▂·▂▃▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▃▂▁ ──83 YA u16 -▃ ▃ ▂▃ ▃ ▃ ▃ ▂▃▃ ▂▃▃▃ ▃ ▃▃▁▂▂▃▃▃·▃ ▁▃ ▃ ▃▂ ──84 YaA u16 -▃ ▃ ▂▁▂▃ ▃ ▂ ▁▃ ▂ ▃ ▃ ▂▃▂▂▁▃▃▂▃▃▂ ▃▂▂▃▃▃▃▁▁·▂ ▃▃· ▂▃▂ ──85 Y u16 -▁ ▃▂▃▃·▂▂▁ ▃▃ ▂▂ ▂▁ ▂▂ ▃ ▂▂ ▂▃▃▃▃▃▃▁▂▂▂▃▃▂▃▃ ▂▁▁▂▂▃▃·▁▁·▂ ▂▂▂▂ ▃▂ ▂▃ ▂▂ ▃▃ ▂▃▂▃▃▂▁ ──86 YA u8 -▃ ▃ ▂▃ ▃ ▂ ▃▃ ▃ ▂▃▃ ▂▃▃▃ ▃ ▃ ▁▂▂▃ ▁·▂ · ▃ ▃▂ ──87 YaA u8 -▁ ▂▂▃▂·▁▂▁ ▃▂ ▂ ▂▂ ▁▃ ▂ ▂▂ ▃▂▃▃▃▂▃▂▂▁▃▃▂▃▃▂ ▂▁▁▃▂▃▂▁▁·▃▂·▂ ▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──88 Y u8 -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▃▃ ▃▃ ▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──89 HSLA double -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▃▃▃▃ ▃▃ ▃ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──90 HSL double - ──91 HSLA float - ──92 HSL float -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──93 HSVA double -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──94 HSV double - ──95 HSVA float - ──96 HSV float -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▃▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──97 Y'CbCr709 double -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▃▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──98 Y'CbCrA709 double - ──99 Y'CbCrA709 float - ──100 Y'CbCr709 float -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁ ▂ ▁▁▁▁▃▂▃ ──101 CMYK double -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──102 CMY double - ──103 CMYK float - ──104 CMY float - ──105 CMYK u8 - ──106 B'aG'aR'aA u8 - ──107 cairo-ARGB32 - ──108 cairo-RGB24 - ──109 cairo-A8 -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁ ▂▃ ──110 CIE Lab double -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▃ ──111 CIE Lab alpha double -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▃▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁ ▁▃▂▃ ──112 CIE LCH(ab) double -· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁ ▃▂▃ ──113 CIE LCH(ab) alpha double -▂ ▃▃▂▃▁·▁▂ ▂▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▂▃▃▁▂▃ ▃ ▃ ▃ ▂▂▁▂▂▁▁▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▂▃ ──114 CIE Lab float -▁ ▂▂▃▂·▁▂▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▃▂▃▂▃ ▃▂ ▃ ▁▁▁▂▂▂▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂ ▂▂ ──115 CIE Lab alpha float - ──116 CIE L alpha float - ──117 CIE Lab u8 - ──118 CIE Lab u16 - ──119 CIE LCH(ab) float - ──120 CIE LCH(ab) alpha float -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||111111111111111111111 -||||||||||111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999000000000011111111112 -0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -total length: 11519 -total cost : 20679660 +chain of conversions. Environment @@ -2106,12 +1983,10 @@ TODO • Support for conversions between formats that have higher dimensionality than RGBA. (arbitrary meaningless components) • Support for datatypes that are not a multiple of 8bit. - • dithering • dynamic data attached to format, or internal handling of icc through a registered set of profiles - • Stocastic runtime profiling with running average of the peformance - for conversions, to avoid problems incurred if other cpu intense is - happening when babl tests a conversions. + • handling of custom RGB primaries and gamma + • dithering Copyright @@ -2194,4 +2069,4 @@ Jon Nordby Massimo Valentini stability fixes -/babl-0.1.18 +/babl-0.1.22 diff --git a/TODO b/TODO index 1c5aefc..6707b94 100644 --- a/TODO +++ b/TODO @@ -3,11 +3,8 @@ diff --git a/babl/Makefile.am b/babl/Makefile.am index 6827faa..096f6b7 100644 --- a/babl/Makefile.am +++ b/babl/Makefile.am @@ -8,6 +8,7 @@ SUBDIRS = base c_sources = \ babl.c \ + babl-cache.c \ babl-component.c \ babl-conversion.c \ babl-core.c \ @@ -16,7 +17,6 @@ c_sources = \ babl-fish-path.c \ babl-fish-reference.c \ babl-fish-simple.c \ - babl-fish-stats.c \ babl-fish.c \ babl-format.c \ babl-hash-table.c \ @@ -90,4 +90,38 @@ libbabl_@BABL_API_VERSION@_la_LDFLAGS= \ -version-info $(BABL_LIBRARY_VERSION) EXTRA_DIST = babl-ref-pixels.inc -# CLEANFILES = + + +# If git is available, always check if git-version.h should be +# updated. If git is not available, don't do anything if git-version.h +# already exists because then we are probably working with a tarball +# in which case the git-version.h we ship is correct. + +libbabl_generated_sources = git-version.h +BUILT_SOURCES = git-version.h +CLEANFILES = git-version.h + +git-version.h: update-git-version-header + @if test -d "$(top_srcdir)/.git"; then \ + git_version="`git --git-dir=$(top_srcdir)/.git describe --always`"; \ + git_last_commit_year="`git --git-dir=$(top_srcdir)/.git log -n1 --reverse --pretty=%ci | cut -b 1-4`"; \ + elif test ! -f "$@"; then \ + git_version="Unknown, shouldn't happen"; \ + git_last_commit_timestamp=-1; \ + git_last_commit_year="`date -u '+%Y'`"; \ + fi; \ + if test -n "$$git_version"; then \ + echo "#ifndef __GIT_VERSION_H__" > "$@.tmp"; \ + echo "#define __GIT_VERSION_H__" >> "$@.tmp"; \ + echo "#define BABL_GIT_VERSION \"$$git_version\"" >> "$@.tmp"; \ + echo "#define BABL_GIT_LAST_COMMIT_YEAR \"$$git_last_commit_year\"" >> "$@.tmp"; \ + echo "#endif /* __GIT_VERSION_H__ */" >> "$@.tmp"; \ + fi + @if ( test -f "$@.tmp" && test -f "$@" && cmp "$@.tmp" "$@" > /dev/null ); then \ + rm -f "$@.tmp"; \ + elif test -f "$@.tmp"; then \ + mv "$@.tmp" "$@"; \ + echo " git HEAD changed: $@ regenerated"; \ + fi + +.PHONY: update-git-version-header diff --git a/babl/Makefile.in b/babl/Makefile.in index 2e5feaf..1061d9b 100644 --- a/babl/Makefile.in +++ b/babl/Makefile.in @@ -137,9 +137,9 @@ LTLIBRARIES = $(lib_LTLIBRARIES) libbabl_@BABL_API_VERSION@_la_DEPENDENCIES = base/libbase.la \ @LTLIBOBJS@ $(am__empty) am__objects_1 = -am__objects_2 = babl.lo babl-component.lo babl-conversion.lo \ - babl-core.lo babl-db.lo babl-extension.lo babl-fish-path.lo \ - babl-fish-reference.lo babl-fish-simple.lo babl-fish-stats.lo \ +am__objects_2 = babl.lo babl-cache.lo babl-component.lo \ + babl-conversion.lo babl-core.lo babl-db.lo babl-extension.lo \ + babl-fish-path.lo babl-fish-reference.lo babl-fish-simple.lo \ babl-fish.lo babl-format.lo babl-hash-table.lo babl-image.lo \ babl-internal.lo babl-introspect.lo babl-list.lo \ babl-memory.lo babl-model.lo babl-mutex.lo babl-palette.lo \ @@ -399,6 +399,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -415,6 +416,7 @@ top_srcdir = @top_srcdir@ SUBDIRS = base c_sources = \ babl.c \ + babl-cache.c \ babl-component.c \ babl-conversion.c \ babl-core.c \ @@ -423,7 +425,6 @@ c_sources = \ babl-fish-path.c \ babl-fish-reference.c \ babl-fish-simple.c \ - babl-fish-stats.c \ babl-fish.c \ babl-format.c \ babl-hash-table.c \ @@ -499,7 +500,16 @@ libbabl_@BABL_API_VERSION@_la_LDFLAGS = \ -version-info $(BABL_LIBRARY_VERSION) EXTRA_DIST = babl-ref-pixels.inc -all: all-recursive + +# If git is available, always check if git-version.h should be +# updated. If git is not available, don't do anything if git-version.h +# already exists because then we are probably working with a tarball +# in which case the git-version.h we ship is correct. +libbabl_generated_sources = git-version.h +BUILT_SOURCES = git-version.h +CLEANFILES = git-version.h +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj @@ -580,6 +590,7 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/gettimeofday.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-cache.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-component.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-conversion.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-core.Plo@am__quote@ @@ -589,7 +600,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish-path.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish-reference.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish-simple.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish-stats.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-format.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-hash-table.Plo@am__quote@ @@ -812,14 +822,16 @@ distdir: $(DISTFILES) fi; \ done check-am: all-am -check: check-recursive +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(library_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-recursive +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive @@ -841,6 +853,7 @@ install-strip: mostlyclean-generic: clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -849,6 +862,7 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ @@ -921,7 +935,8 @@ ps-am: uninstall-am: uninstall-libLTLIBRARIES \ uninstall-library_includeHEADERS -.MAKE: $(am__recursive_targets) install-am install-strip +.MAKE: $(am__recursive_targets) all check install install-am \ + install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libLTLIBRARIES \ @@ -942,7 +957,31 @@ uninstall-am: uninstall-libLTLIBRARIES \ .PRECIOUS: Makefile -# CLEANFILES = + +git-version.h: update-git-version-header + @if test -d "$(top_srcdir)/.git"; then \ + git_version="`git --git-dir=$(top_srcdir)/.git describe --always`"; \ + git_last_commit_year="`git --git-dir=$(top_srcdir)/.git log -n1 --reverse --pretty=%ci | cut -b 1-4`"; \ + elif test ! -f "$@"; then \ + git_version="Unknown, shouldn't happen"; \ + git_last_commit_timestamp=-1; \ + git_last_commit_year="`date -u '+%Y'`"; \ + fi; \ + if test -n "$$git_version"; then \ + echo "#ifndef __GIT_VERSION_H__" > "$@.tmp"; \ + echo "#define __GIT_VERSION_H__" >> "$@.tmp"; \ + echo "#define BABL_GIT_VERSION \"$$git_version\"" >> "$@.tmp"; \ + echo "#define BABL_GIT_LAST_COMMIT_YEAR \"$$git_last_commit_year\"" >> "$@.tmp"; \ + echo "#endif /* __GIT_VERSION_H__ */" >> "$@.tmp"; \ + fi + @if ( test -f "$@.tmp" && test -f "$@" && cmp "$@.tmp" "$@" > /dev/null ); then \ + rm -f "$@.tmp"; \ + elif test -f "$@.tmp"; then \ + mv "$@.tmp" "$@"; \ + echo " git HEAD changed: $@ regenerated"; \ + fi + +.PHONY: update-git-version-header # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/babl/babl-cache.c b/babl/babl-cache.c new file mode 100644 index 0000000..1f0b6f5 --- /dev/null +++ b/babl/babl-cache.c @@ -0,0 +1,348 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2016 Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include +#include +#include "config.h" +#include "babl-internal.h" +#include "git-version.h" + +#ifdef _WIN32 +#define FALLBACK_CACHE_PATH "C:/babl-fishes.txt" +#else +#define FALLBACK_CACHE_PATH "/tmp/babl-fishes.txt" +#endif + +static int +mk_ancestry_iter (const char *path) +{ + char copy[4096]; + strncpy (copy, path, 4096); + if (strrchr (copy, '/')) + { + *strrchr (copy, '/') = '\0'; + if (copy[0]) + { + struct stat stat_buf; + if ( ! (stat (copy, &stat_buf)==0 && S_ISDIR(stat_buf.st_mode))) + { + if (mk_ancestry_iter (copy) != 0) + return -1; +#ifndef _WIN32 + return mkdir (copy, S_IRWXU); +#else + return mkdir (copy); +#endif + } + } + } + return -1; +} + +static int +mk_ancestry (const char *path) +{ + char copy[4096]; + strncpy (copy, path, 4096); +#ifdef _WIN32 + for (char *c = copy; *c; c++) + if (*c == '\\') + *c = '/'; +#endif + return mk_ancestry_iter (copy); +} + +static const char *fish_cache_path (void) +{ + struct stat stat_buf; + static char path[4096]; + + strncpy (path, FALLBACK_CACHE_PATH, 4096); +#ifndef _WIN32 + if (getenv ("HOME")) + sprintf (path, "%s/.cache/babl/babl-fishes", getenv("HOME")); +#else + if (getenv ("TEMP")) + sprintf (path, "%s\\babl-fishes.txt", getenv("TEMP")); +#endif + + if (stat (path, &stat_buf)==0 && S_ISREG(stat_buf.st_mode)) + return path; + + if (mk_ancestry (path) != 0) + return FALLBACK_CACHE_PATH; + + return path; +} + +static char * +babl_fish_serialize (Babl *fish, char *dest, int n) +{ + char *d = dest; + if (fish->class_type != BABL_FISH_PATH) + return NULL; + + snprintf (d, n, "%s\n%s\n", + babl_get_name (fish->fish.source), + babl_get_name (fish->fish.destination)); + n -= strlen (d);d += strlen (d); + + snprintf (d, n, "\tpixels=%li", fish->fish.pixels); + n -= strlen (d);d += strlen (d); + + snprintf (d, n, " processings=%i", fish->fish.processings); + n -= strlen (d);d += strlen (d); + + snprintf (d, n, " cost=%d", (int)fish->fish_path.cost); + n -= strlen (d);d += strlen (d); + + snprintf (d, n, " error=%f", fish->fish.error); + n -= strlen (d);d += strlen (d); + + snprintf (d, n, "\n"); + n -= strlen (d);d += strlen (d); + + for (int i = 0; i < fish->fish_path.conversion_list->count; i++) + { + snprintf (d, n, "\t%s\n", + babl_get_name(fish->fish_path.conversion_list->items[i] )); + n -= strlen (d);d += strlen (d); + } + + return dest; +} + +static int compare_fish_pixels (const void *a, const void *b) +{ + const Babl **fa = (void*)a; + const Babl **fb = (void*)b; + return ((*fb)->fish.pixels - (*fa)->fish.pixels) + + ((*fb)->fish.processings - (*fa)->fish.processings); +} + +void babl_store_db (void) +{ + BablDb *db = babl_fish_db (); + int i; + FILE *dbfile = fopen (fish_cache_path (), "w"); + if (!dbfile) + return; + fprintf (dbfile, "#%s BABL_PATH_LENGTH=%d BABL_TOLERANCE=%f\n", + BABL_GIT_VERSION, _babl_max_path_len (), _babl_legal_error ()); + + /* sort the list of fishes by usage, making next run more efficient - + * and the data easier to approach as data for targeted optimization + */ + qsort (db->babl_list->items, db->babl_list->count, + sizeof (Babl*), compare_fish_pixels); + + for (i = 0; i< db->babl_list->count; i++) + { + Babl *fish = db->babl_list->items[i]; + char tmp[8192]; + if (babl_fish_serialize (fish, tmp, 4096)) + fprintf (dbfile, "%s----\n", tmp); + } + fclose (dbfile); +} + +static int +babl_file_get_contents (const char *path, + char **contents, + long *length, + void *error) +{ + FILE *file; + long size; + char *buffer; + + file = fopen (path,"rb"); + + if (!file) + return -1; + + fseek (file, 0, SEEK_END); + size = ftell (file); + if (length) *length = size; + rewind (file); + buffer = malloc(size + 8); + + if (!buffer) + { + fclose(file); + return -1; + } + + size -= fread (buffer, 1, size, file); + if (size) + { + fclose (file); + free (buffer); + return -1; + } + fclose (file); + *contents = buffer; + return 0; +} + +int +_babl_fish_path_destroy (void *data); + +char * +_babl_fish_create_name (char *buf, + const Babl *source, + const Babl *destination, + int is_reference); + +void babl_init_db (void) +{ + const char *path = fish_cache_path (); + long length = -1; + char seps[] = "\n\r"; + Babl *babl = NULL; + char *contents = NULL; + char *token; + char *tokp; + const Babl *from_format = NULL; + const Babl *to_format = NULL; + time_t tim = time (NULL); + + if (getenv ("BABL_DEBUG_CONVERSIONS")) + return; + + babl_file_get_contents (path, &contents, &length, NULL); + if (!contents) + return; + + token = strtok_r (contents, seps, &tokp); + while( token != NULL ) + { + switch (token[0]) + { + case '-': /* finalize */ + if (babl) + { + if (((babl->fish.pixels + babl->fish.processings) % 100) == (tim % 100)) + { + /* 1% chance of individual cached conversions being dropped - + * making sure mis-measured conversions do not + stick around for a long time*/ + babl_free (babl); + } + else + babl_db_insert (babl_fish_db(), babl); + } + from_format = NULL; + to_format = NULL; + babl=NULL; + break; + case '#': + /* if babl has changed in git .. drop whole cache */ + { + char buf[2048]; + sprintf (buf, "#%s BABL_PATH_LENGTH=%d BABL_TOLERANCE=%f", + BABL_GIT_VERSION, _babl_max_path_len (), _babl_legal_error ()); + if (strcmp ( token, buf)) + { + free (contents); + return; + } + } + break; + case '\t': + if (strchr (token, '=')) + { + char seps2[] = " "; + char *tokp2; + char *token2; + char name[4096]; + + _babl_fish_create_name (name, from_format, to_format, 1); + babl = babl_db_exist_by_name (babl_fish_db (), name); + if (babl) + { + fprintf (stderr, "%s:%i: loading of cache failed\n", + __FUNCTION__, __LINE__); + return; + } + + babl = babl_calloc (1, sizeof (BablFishPath) + + strlen (name) + 1); + babl_set_destructor (babl, _babl_fish_path_destroy); + + babl->class_type = BABL_FISH_PATH; + babl->instance.id = babl_fish_get_id (from_format, to_format); + babl->instance.name = ((char *) babl) + sizeof (BablFishPath); + strcpy (babl->instance.name, name); + babl->fish.source = from_format; + babl->fish.destination = to_format; + babl->fish_path.conversion_list = babl_list_init_with_size (10); + + token2 = strtok_r (&token[1], seps2, &tokp2); + while( token2 != NULL ) + { + if (!strncmp (token2, "error=", 6)) + { + babl->fish.error = babl_parse_double (token2 + 6); + } + else if (!strncmp (token2, "cost=", 5)) + { + babl->fish_path.cost = babl_parse_double (token2 + 5); + } + else if (!strncmp (token2, "pixels=", 7)) + { + babl->fish.pixels = strtol (token2 + 7, NULL, 10); + } + else if (!strncmp (token2, "processings=", 12)) + { + babl->fish.processings = strtol (token2 + 12, NULL, 10); + } + token2 = strtok_r (NULL, seps2, &tokp2); + } + } + else + { + Babl *conv = (void*)babl_db_find(babl_conversion_db(), &token[1]); + if (!conv) + { + return; + } + else + babl_list_insert_last (babl->fish_path.conversion_list, conv); + } + break; + default: + if (!from_format) + { + from_format = (void*)babl_db_find(babl_format_db(), token); + if (!from_format) + return; + } + else + { + to_format = (void*)babl_db_find(babl_format_db(), token); + if (!to_format) + return; + } + break; + } + token = strtok_r (NULL, seps, &tokp); + } + if (contents) + free (contents); +} diff --git a/babl/babl-conversion.c b/babl/babl-conversion.c index 37453e0..dbdce50 100644 --- a/babl/babl-conversion.c +++ b/babl/babl-conversion.c @@ -543,7 +543,7 @@ babl_conversion_error (BablConversion *conversion) babl_free (ref_destination_rgba_double); conversion->error = error; - conversion->cost = babl_process_cost (ticks_start, ticks_end); + conversion->cost = ticks_end - ticks_start; return error; } diff --git a/babl/babl-extension.c b/babl/babl-extension.c index bc371f8..01efe0f 100644 --- a/babl/babl-extension.c +++ b/babl/babl-extension.c @@ -346,6 +346,14 @@ babl_extension_load_dir_list (const char *dir_list) } } babl_free (path); + if (babl_db_count (db) <= 1) + { + fprintf (stderr, +"WARNING: the babl installation seems broken, no extensions found in queried\n" +"BABL_PATH (%s) this means no SIMD/instructions/special case fast paths and\n" +"only slow reference conversions are available, applications might still\n" +"run but software relying on babl for conversions will be slow\n", dir_list); + } } #endif diff --git a/babl/babl-fish-path.c b/babl/babl-fish-path.c index bf9c520..23e7757 100644 --- a/babl/babl-fish-path.c +++ b/babl/babl-fish-path.c @@ -21,7 +21,7 @@ #include "babl-internal.h" #include "babl-ref-pixels.h" -#define BABL_LEGAL_ERROR 0.000001 +#define BABL_TOLERANCE 0.000006 #define BABL_MAX_COST_VALUE 2000000 #define BABL_HARD_MAX_PATH_LENGTH 8 #define BABL_MAX_NAME_LEN 1024 @@ -31,7 +31,7 @@ #endif #define NUM_TEST_PIXELS (babl_get_num_path_test_pixels ()) -#define MAX_BUFFER_SIZE 1024 /* XXX: reasonable size for this should be profiled */ +#define MAX_BUFFER_SIZE 2048 /* XXX: reasonable size for this should be profiled */ int babl_in_fish_path = 0; @@ -88,18 +88,18 @@ get_conversion_path (PathContext *pc, int current_length, int max_length); -static char * -create_name (char *buf, - const Babl *source, - const Babl *destination, - int is_reference); +char * +_babl_fish_create_name (char *buf, + const Babl *source, + const Babl *destination, + int is_reference); -static double legal_error (void); static int max_path_length (void); +static int debug_conversions = 0; -static double legal_error (void) +double _babl_legal_error (void) { static double error = 0.0; const char *env; @@ -111,7 +111,14 @@ static double legal_error (void) if (env && env[0] != '\0') error = babl_parse_double (env); else - error = BABL_LEGAL_ERROR; + error = BABL_TOLERANCE; + + env = getenv ("BABL_DEBUG_CONVERSIONS"); + if (env && env[0] != '\0') + debug_conversions = 1; + else + debug_conversions = 0; + return error; } @@ -127,7 +134,10 @@ static int max_path_length (void) if (env) max_length = atoi (env); else - max_length = 4; + max_length = 3; /* reducing this number makes finding short fishes much + faster - even if we lose out on some of the fast + bigger fish + */ if (max_length > BABL_HARD_MAX_PATH_LENGTH) max_length = BABL_HARD_MAX_PATH_LENGTH; else if (max_length <= 0) @@ -135,6 +145,10 @@ static int max_path_length (void) return max_length; } +int _babl_max_path_len (void) +{ + return max_path_length (); +} /* The task of BablFishPath construction is to compute * the shortest path in a graph where formats are the vertices @@ -176,9 +190,9 @@ get_conversion_path (PathContext *pc, path_error *= (1.0 + babl_conversion_error ((BablConversion *) pc->current_path->items[i])); } - if (path_error - 1.0 <= legal_error ()) /* check this before the next; - which does a more accurate - measurement of the error */ + if (path_error - 1.0 <= _babl_legal_error ()) + /* check this before the more accurate measurement of error - + to bail earlier */ { FishPathInstrumentation fpi; memset (&fpi, 0, sizeof (fpi)); @@ -187,10 +201,17 @@ get_conversion_path (PathContext *pc, fpi.destination = pc->to_format; get_path_instrumentation (&fpi, pc->current_path, &path_cost, &ref_cost, &path_error); + if(debug_conversions && current_length == 1) + fprintf (stderr, "%s error:%f cost:%f \n", + babl_get_name (pc->current_path->items[0]), + /*babl_get_name (pc->fish_path->fish.source), + babl_get_name (pc->fish_path->fish.destination),*/ + path_error, + path_cost /*, current_length*/); if ((path_cost < ref_cost) && /* do not use paths that took longer to compute than reference */ (path_cost < pc->fish_path->fish_path.cost) && - (path_error <= legal_error ())) + (path_error <= _babl_legal_error ())) { /* We have found the best path so far, * let's copy it into our new fish */ @@ -211,7 +232,6 @@ get_conversion_path (PathContext *pc, BablList *list; int i; - list = current_format->format.from_list; if (list) { @@ -238,11 +258,11 @@ get_conversion_path (PathContext *pc, } } -static char * -create_name (char *buf, - const Babl *source, - const Babl *destination, - int is_reference) +char * +_babl_fish_create_name (char *buf, + const Babl *source, + const Babl *destination, + int is_reference) { /* fish names are intentionally kept short */ snprintf (buf, BABL_MAX_NAME_LEN, "%s %p %p", "", @@ -250,8 +270,11 @@ create_name (char *buf, return buf; } -static int -babl_fish_path_destroy (void *data) +int +_babl_fish_path_destroy (void *data); + +int +_babl_fish_path_destroy (void *data) { Babl *babl=data; if (babl->fish_path.conversion_list) @@ -267,19 +290,21 @@ babl_fish_path (const Babl *source, Babl *babl = NULL; char name[BABL_MAX_NAME_LEN]; - create_name (name, source, destination, 1); + _babl_fish_create_name (name, source, destination, 1); + babl_mutex_lock (babl_format_mutex); babl = babl_db_exist_by_name (babl_fish_db (), name); if (babl) { /* There is an instance already registered by the required name, * returning the preexistent one instead. */ + babl_mutex_unlock (babl_format_mutex); return babl; } babl = babl_calloc (1, sizeof (BablFishPath) + strlen (name) + 1); - babl_set_destructor (babl, babl_fish_path_destroy); + babl_set_destructor (babl, _babl_fish_path_destroy); babl->class_type = BABL_FISH_PATH; babl->instance.id = babl_fish_get_id (source, destination); @@ -291,7 +316,6 @@ babl_fish_path (const Babl *source, babl->fish.pixels = 0; babl->fish.error = BABL_MAX_COST_VALUE; babl->fish_path.cost = BABL_MAX_COST_VALUE; - babl->fish_path.loss = BABL_MAX_COST_VALUE; babl->fish_path.conversion_list = babl_list_init_with_size (BABL_HARD_MAX_PATH_LENGTH); { @@ -300,7 +324,6 @@ babl_fish_path (const Babl *source, pc.fish_path = babl; pc.to_format = (Babl *) destination; - babl_mutex_lock (babl_format_mutex); /* we hold a global lock whilerunning get_conversion_path since * it depends on keeping the various format.visited members in * a consistent state, this code path is not performance critical @@ -311,13 +334,13 @@ babl_fish_path (const Babl *source, get_conversion_path (&pc, (Babl *) source, 0, max_path_length ()); babl_in_fish_path--; - babl_mutex_unlock (babl_format_mutex); babl_free (pc.current_path); } if (babl_list_size (babl->fish_path.conversion_list) == 0) { babl_free (babl); + babl_mutex_unlock (babl_format_mutex); return NULL; } @@ -325,6 +348,7 @@ babl_fish_path (const Babl *source, * name, inserting newly created class into database. */ babl_db_insert (babl_fish_db (), babl); + babl_mutex_unlock (babl_format_mutex); return babl; } @@ -369,7 +393,6 @@ babl_fish_path_process (Babl *babl, destination, dest_bpp, n); - } static long @@ -415,7 +438,6 @@ babl_fish_process (Babl *babl, ret = -1; break; } - return ret; } @@ -589,7 +611,7 @@ init_path_instrumentation (FishPathInstrumentation *fpi, babl_process (fpi->fish_reference, fpi->source, fpi->ref_destination, fpi->num_test_pixels); ticks_end = babl_ticks (); - fpi->reference_cost = babl_process_cost (ticks_start, ticks_end); + fpi->reference_cost = ticks_end - ticks_start; /* transform the reference destination buffer to RGBA */ babl_process (fpi->fish_destination_to_rgba, @@ -665,7 +687,7 @@ get_path_instrumentation (FishPathInstrumentation *fpi, ticks_start = babl_ticks (); process_conversion_path (path, fpi->source, source_bpp, fpi->destination, dest_bpp, fpi->num_test_pixels); ticks_end = babl_ticks (); - *path_cost = babl_process_cost (ticks_start, ticks_end); + *path_cost = ticks_end - ticks_start; /* transform the reference and the actual destination buffers to RGBA * for comparison with each other @@ -675,7 +697,7 @@ get_path_instrumentation (FishPathInstrumentation *fpi, *path_error = babl_rel_avg_error (fpi->destination_rgba_double, fpi->ref_destination_rgba_double, - fpi->num_test_pixels * 4); + fpi->num_test_pixels * 4); #if 0 fpi->fish_rgba_to_source->fish.processings--; diff --git a/babl/babl-fish-reference.c b/babl/babl-fish-reference.c index 4133e40..00ff6be 100644 --- a/babl/babl-fish-reference.c +++ b/babl/babl-fish-reference.c @@ -30,21 +30,71 @@ assert_conversion_find (const void *source, return ret; } +static int +create_name_internal (char *buf, + size_t maxlen, + const Babl *source, + const Babl *destination, + int is_reference) +{ + return snprintf (buf, maxlen, "%s %p %p", + is_reference ? "ref " + : "", + source, destination); +} + +#ifdef HAVE_TLS + +static __thread char buf[1024]; + +static char * +create_name (const Babl *source, + const Babl *destination, + int is_reference) +{ + int size = 0; + + size = create_name_internal (buf, sizeof(buf), source, destination, is_reference); + + if (size < 0) + return NULL; + + return buf; +} + + +#else + static char * create_name (const Babl *source, const Babl *destination, int is_reference) { - static char buf[1024]; + int size = 0; + char *buf = NULL; + + size = create_name_internal (buf, size, source, destination, is_reference); + + if (size < 0) + return NULL; + + size++; /* For '\0' */ + buf = malloc (size); + if (buf == NULL) + return NULL; + + size = create_name_internal (buf, size, source, destination, is_reference); + + if (size < 0) + { + free (buf); + return NULL; + } - /* fish names are intentionally kept short */ - snprintf (buf, 1024, "%s %p %p", - is_reference ? "ref " - : "", - source, destination); return buf; } +#endif Babl * babl_fish_reference (const Babl *source, @@ -53,12 +103,17 @@ babl_fish_reference (const Babl *source, Babl *babl = NULL; char *name = create_name (source, destination, 1); + babl_assert (name); + babl = babl_db_exist_by_name (babl_fish_db (), name); if (babl) { /* There is an instance already registered by the required name, * returning the preexistent one instead. */ +#ifndef HAVE_TLS + free (name); +#endif return babl; } @@ -87,6 +142,9 @@ babl_fish_reference (const Babl *source, * name, inserting newly created class into database. */ babl_db_insert (babl_fish_db (), babl); +#ifndef HAVE_TLS + free (name); +#endif return babl; } diff --git a/babl/babl-fish-stats.c b/babl/babl-fish-stats.c deleted file mode 100644 index 2b9cc7c..0000000 --- a/babl/babl-fish-stats.c +++ /dev/null @@ -1,433 +0,0 @@ -/* babl - dynamically extendable universal pixel fish library. - * Copyright (C) 2005, Øyvind KolÃ¥s. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, see - * . - */ - -#include "config.h" -#include "babl-internal.h" - -static FILE *output_file = NULL; -static int qux = 0; - -static char *utf8_bar[] = { " ", "·", "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" }; -/* -static char *utf8_bar[]= {"!","▁","▃","▅","▇","█","!","!","!"}; -static char *utf8_bar[]={"·", "█", "▇", "▆", "▅", "▄", "▃", "▂", "▁", }; -static char *utf8_bar[]={" ","1","2","3","4","5","6","7","8"}; -*/ - -static double sum_pixels = 0.0; - -static int -table_destination_sum_each (Babl *babl, - void *userdata) -{ - const Babl *source = userdata; - const Babl *destination = babl; - - if (source != destination) - { - const Babl *fish = babl_fish (source, destination); - babl_assert (fish); - sum_pixels += fish->fish.pixels; - } - return 0; -} - -static int -table_source_sum_each (Babl *babl, - void *userdata) -{ - babl_format_class_for_each (table_destination_sum_each, babl); - return 0; -} - -static void -table_sum_processings_calc (void) -{ - sum_pixels = 0; - babl_format_class_for_each (table_source_sum_each, NULL); -} - -#define LIMIT 0.03 - -static int -table_destination_each (Babl *babl, - void *userdata) -{ - Babl *source = userdata; - Babl *destination = babl; - - qux++; - if (qux % babl_formats_count () == qux / babl_formats_count ()) - fprintf (output_file, " "); - else - { - const Babl *fish = babl_fish (source, destination); - - babl_assert (fish); - - - switch (fish->class_type) - { - case BABL_FISH_PATH: - - fprintf (output_file, "%s", - fish->fish.pixels / sum_pixels > LIMIT ? " style='background-color: #69f'" : "", - utf8_bar[babl_list_size (fish->fish_path.conversion_list)]); - - { - int i; - fprintf (output_file, "
"); - fprintf (output_file, "

path %s to %s

", source->instance.name, destination->instance.name); - if (fish->fish.processings > 0) - { - fprintf (output_file, "Processings:%i
", fish->fish.processings); - fprintf (output_file, "Pixels:%li
", fish->fish.pixels); - } - fprintf (output_file, "\n"); - - fprintf (output_file, ""); - fprintf (output_file, ""); - fprintf (output_file, ""); - fprintf (output_file, ""); - fprintf (output_file, ""); - - for (i = 0; i < babl_list_size (fish->fish_path.conversion_list); i++) - { - fprintf (output_file, ""); - fprintf (output_file, "", BABL (fish->fish_path.conversion_list->items[i])->instance.name); - fprintf (output_file, "", - babl_conversion_cost (&BABL (fish->fish_path.conversion_list->items[i])->conversion)); - fprintf (output_file, "", - babl_conversion_error (&BABL (fish->fish_path.conversion_list->items[i])->conversion)); - fprintf (output_file, ""); - } - - fprintf (output_file, ""); - fprintf (output_file, ""); - fprintf (output_file, "", fish->fish_path.cost); - fprintf (output_file, "", fish->fish.error); - fprintf (output_file, ""); - fprintf (output_file, "
conversioncosterror
%s%li%e
total%3.0f%e
"); - fprintf (output_file, "
"); - } - fprintf (output_file, "
\n"); - break; - - case BABL_FISH_REFERENCE: - fprintf (output_file, " ", - fish->fish.pixels / sum_pixels > LIMIT ? " style='background-color: #f99'" : ""); - fprintf (output_file, "
"); - fprintf (output_file, "

Reference %s to %s

", source->instance.name, destination->instance.name); - - if (fish->fish.processings > 1) - { - fprintf (output_file, "Processings:%i
", fish->fish.processings); - fprintf (output_file, "Pixels:%li
", fish->fish.pixels); - } - fprintf (output_file, "
"); - fprintf (output_file, "
\n"); - break; - - case BABL_FISH_SIMPLE: - fprintf (output_file, "·", - fish->fish.pixels / sum_pixels > LIMIT ? " style='background-color: #69f'" : ""); - fprintf (output_file, "
"); - fprintf (output_file, "

Simple %s to %s

", source->instance.name, destination->instance.name); - - - fprintf (output_file, "%s
", BABL (fish->fish_simple.conversion)->instance.name); - fprintf (output_file, "cost: %li
", babl_conversion_cost ((fish->fish_simple.conversion))); - fprintf (output_file, "error: %e
", babl_conversion_error ((fish->fish_simple.conversion))); - - if (fish->fish.processings > 0) - { - fprintf (output_file, "Processings:%i
", fish->fish.processings); - fprintf (output_file, "Pixels:%li
", fish->fish.pixels); - } - fprintf (output_file, "
"); - fprintf (output_file, "
\n"); - break; - - default: - babl_fatal ("Unknown fish type"); - break; - } - } - return 0; -} - -static int source_no = 0; - - - -static int -table_source_each (Babl *babl, - void *userdata) -{ - char expanded_name[512]; - const char *s; - char *d; - - s = babl->instance.name; - d = &expanded_name[0]; - - while (*s) - { - switch (*s) - { - case ' ': - *(d++) = '&'; - *(d++) = 'n'; - *(d++) = 'b'; - *(d++) = 's'; - *(d++) = 'p'; - *(d++) = ';'; - *(d) = '\0'; - s++; - break; - - default: - *(d++) = *(s++); - *(d) = '\0'; - break; - } - } - - fprintf (output_file, ""); - fprintf (output_file, "%s", expanded_name); - { - int i; - - fprintf (output_file, "
", babl); - fprintf (output_file, "

%s

", babl->instance.name); - - fprintf (output_file, "
"); - fprintf (output_file, "
bytes/pixel
%i
", babl->format.bytes_per_pixel); - fprintf (output_file, "
model
%s
", BABL (babl->format.model)->instance.name); - fprintf (output_file, "
loss
%f
", babl_format_loss (babl)); - fprintf (output_file, "
planar
%d
", babl->format.planar); - fprintf (output_file, "
components
"); - - for (i = 0; i < babl->format.components; i++) - { - fprintf (output_file, "", - BABL (babl->format.type[i])->instance.name, - BABL (babl->format.component[i])->instance.name); - } - fprintf (output_file, "
%s%s
"); - - fprintf (output_file, "
\n"); - } - - fprintf (output_file, "
"); - babl_format_class_for_each (table_destination_each, babl); - fprintf (output_file, "\n"); - source_no++; - return 0; -} - -/* copied from babl-fish-path.c */ -#define BABL_LEGAL_ERROR 0.000001 -static double legal_error (void) -{ - static double error = 0.0; - const char *env; - - if (error != 0.0) - return error; - - env = getenv ("BABL_TOLERANCE"); - if (env && env[0] != '\0') - error = babl_parse_double (env); - else - error = BABL_LEGAL_ERROR; - return error; -} - -static int -each_conv (Babl *babl, - void *data) -{ - double error, cost; - - if (BABL (babl->conversion.source)->class_type != BABL_FORMAT) - return 0; - - error = babl_conversion_error (&babl->conversion); - cost = babl_conversion_cost (&babl->conversion); - - if (error > legal_error ()) - { - fprintf (output_file, "
%s
", babl->instance.name); - fprintf (output_file, "
"); - } - else - { - fprintf (output_file, "
%s
", babl->instance.name); - } - fprintf (output_file, "error: %f cost: %4.0f processings: %i pixels: %li", error, cost, - babl->conversion.processings, babl->conversion.pixels); - fprintf (output_file, "
"); - - return 0; -} - -static void -conversions (void) -{ - fprintf (output_file, "

Conversions

\n"); - babl_conversion_class_for_each (each_conv, NULL); - fprintf (output_file, "
\n"); -} - - - -void -babl_fish_stats (FILE *file) -{ - output_file = file; - - table_sum_processings_calc (); - fprintf (output_file, - "\n" - "\n" - "\n" - "\n" - "BablFishPath introspection\n" - "\n" - "" - - "" - - - "\n"); - - fprintf (output_file, "\n"); - - fprintf (output_file, "

BablFishPath introspection

"); - fprintf (output_file, "

Instrumentation and pathlengths.

"); - - fprintf (output_file, "\n"); - - babl_format_class_for_each (table_source_each, NULL); - - fprintf (output_file, "
Source formatDestination formats
"); - - fprintf (output_file, "
\n"); - - conversions (); - - fprintf (output_file, "\n"); -} - diff --git a/babl/babl-fish.h b/babl/babl-fish.h index 1592329..54d670a 100644 --- a/babl/babl-fish.h +++ b/babl/babl-fish.h @@ -66,7 +66,6 @@ typedef struct { BablFish fish; double cost; /* number of ticks *10 + chain_length */ - double loss; /* error introduced */ BablList *conversion_list; } BablFishPath; diff --git a/babl/babl-internal.h b/babl/babl-internal.h index ef5411f..228faa5 100644 --- a/babl/babl-internal.h +++ b/babl/babl-internal.h @@ -84,7 +84,6 @@ long babl_fish_reference_process (const Babl *babl, Babl * babl_fish_reference (const Babl *source, const Babl *destination); Babl * babl_fish_simple (BablConversion *conversion); -void babl_fish_stats (FILE *file); Babl * babl_fish_path (const Babl *source, const Babl *destination); @@ -317,4 +316,9 @@ static inline double babl_parse_double (const char *str) } +double _babl_legal_error (void); +void babl_init_db (void); +void babl_store_db (void); +int _babl_max_path_len (void); + #endif diff --git a/babl/babl-util.c b/babl/babl-util.c index f68a684..01a5e97 100644 --- a/babl/babl-util.c +++ b/babl/babl-util.c @@ -80,13 +80,6 @@ babl_ticks (void) } #endif -long -babl_process_cost (long ticks_start, - long ticks_end) -{ - return (ticks_end - ticks_start) * 10 + 1; -} - double babl_rel_avg_error (const double *imgA, const double *imgB, diff --git a/babl/babl-util.h b/babl/babl-util.h index e04120e..05ebdf4 100644 --- a/babl/babl-util.h +++ b/babl/babl-util.h @@ -22,10 +22,6 @@ long babl_ticks (void); -long -babl_process_cost (long ticks_start, - long ticks_end); - double babl_rel_avg_error (const double *imgA, const double *imgB, diff --git a/babl/babl-version.h b/babl/babl-version.h index 29afa86..11c7b8f 100644 --- a/babl/babl-version.h +++ b/babl/babl-version.h @@ -34,7 +34,7 @@ #define BABL_MAJOR_VERSION 0 #define BABL_MINOR_VERSION 1 -#define BABL_MICRO_VERSION 18 +#define BABL_MICRO_VERSION 22 /** Get the version information on the babl library */ void babl_get_version (int *major, diff --git a/babl/babl.c b/babl/babl.c index 0484d30..935a860 100644 --- a/babl/babl.c +++ b/babl/babl.c @@ -150,6 +150,8 @@ babl_init (void) dir_list = babl_dir_list (); babl_extension_load_dir_list (dir_list); babl_free (dir_list); + + babl_init_db (); } } @@ -158,17 +160,7 @@ babl_exit (void) { if (!-- ref_count) { - if (getenv ("BABL_STATS")) - { - char logfile_name[] = "/tmp/babl-stats.html"; - FILE *logfile; - logfile = fopen (logfile_name, "w"); - if (logfile) - { - babl_fish_stats (logfile); - fclose (logfile); - } - } + babl_store_db (); babl_extension_deinit (); babl_free (babl_extension_db ());; diff --git a/babl/base/Makefile.in b/babl/base/Makefile.in index f73a3f1..7958cb1 100644 --- a/babl/base/Makefile.in +++ b/babl/base/Makefile.in @@ -313,6 +313,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/babl/base/pow-24.c b/babl/base/pow-24.c index a3bb36e..dbc4071 100644 --- a/babl/base/pow-24.c +++ b/babl/base/pow-24.c @@ -18,7 +18,7 @@ #include #include "util.h" - +#if 0 /* a^b = exp(b*log(a)) * * Extracting the exponent from a float gives us an approximate log. @@ -71,3 +71,58 @@ babl_pow_1_24 (double x) y = (7./6.) * y - z * ((y*y)*(y*y)*(y*y*y)); return x*y; } + +////////////////////////////////////////////// +/* a^b = exp(b*log(a)) + * + * Extracting the exponent from a float gives us an approximate log. + * Or better yet, reinterpret the bitpattern of the whole float as an int. + * + * However, the output values of 12throot vary by less than a factor of 2 + * over the domain we care about, so we only get log() that way, not exp(). + * + * Approximate exp() with a low-degree polynomial; not exactly equal to the + * Taylor series since we're minimizing maximum error over a certain finite + * domain. It's not worthwhile to use lots of terms, since Newton's method + * has a better convergence rate once you get reasonably close to the answer. + */ +static inline float +init_newtonf (float x, float exponent, float c0, float c1, float c2) +{ + int iexp; + float y = frexpf(x, &iexp); + y = 2*y+(iexp-2); + c1 *= M_LN2*exponent; + c2 *= M_LN2*M_LN2*exponent*exponent; + return y = c0 + c1*y + c2*y*y; +} + +/* Returns x^2.4 == (x*(x^(-1/5)))^3, using Newton's method for x^(-1/5). + */ +float +babl_pow_24f (float x) +{ + float y = init_newtonf (x, -1.f/5, 0.9953189663f, 0.9594345146f, 0.6742970332f); + int i; + for (i = 0; i < 3; i++) + y = (1.f+1.f/5)*y - ((1./5)*x*(y*y))*((y*y)*(y*y)); + x *= y; + return x*x*x; +} + +/* Returns x^(1/2.4) == x*((x^(-1/6))^(1/2))^7, using Newton's method for x^(-1/6). + */ +float +babl_pow_1_24f (float x) +{ + float y = init_newtonf (x, -1.f/12, 0.9976800269f, 0.9885126933f, 0.5908575383f); + int i; + float z; + x = sqrtf (x); + /* newton's method for x^(-1/6) */ + z = (1.f/6.f) * x; + for (i = 0; i < 3; i++) + y = (7.f/6.f) * y - z * ((y*y)*(y*y)*(y*y*y)); + return x*y; +} +#endif diff --git a/babl/base/pow-24.h b/babl/base/pow-24.h index e822297..cbd6fd4 100644 --- a/babl/base/pow-24.h +++ b/babl/base/pow-24.h @@ -19,7 +19,119 @@ #ifndef _BASE_POW_24_H #define _BASE_POW_24_H -extern double babl_pow_1_24 (double x); -extern double babl_pow_24 (double x); +static double babl_pow_1_24 (double x); +static double babl_pow_24 (double x); +static float babl_pow_1_24f (float x); +static float babl_pow_24f (float x); + + +/* a^b = exp(b*log(a)) + * + * Extracting the exponent from a float gives us an approximate log. + * Or better yet, reinterpret the bitpattern of the whole float as an int. + * + * However, the output values of 12throot vary by less than a factor of 2 + * over the domain we care about, so we only get log() that way, not exp(). + * + * Approximate exp() with a low-degree polynomial; not exactly equal to the + * Taylor series since we're minimizing maximum error over a certain finite + * domain. It's not worthwhile to use lots of terms, since Newton's method + * has a better convergence rate once you get reasonably close to the answer. + */ +static inline double +init_newton (double x, double exponent, double c0, double c1, double c2) +{ + int iexp; + double y = frexp(x, &iexp); + y = 2*y+(iexp-2); + c1 *= M_LN2*exponent; + c2 *= M_LN2*M_LN2*exponent*exponent; + return y = c0 + c1*y + c2*y*y; +} + +/* Returns x^2.4 == (x*(x^(-1/5)))^3, using Newton's method for x^(-1/5). + */ +static inline double +babl_pow_24 (double x) +{ + double y = init_newton (x, -1./5, 0.9953189663, 0.9594345146, 0.6742970332); + int i; + for (i = 0; i < 3; i++) + y = (1.+1./5)*y - ((1./5)*x*(y*y))*((y*y)*(y*y)); + x *= y; + return x*x*x; +} + +/* Returns x^(1/2.4) == x*((x^(-1/6))^(1/2))^7, using Newton's method for x^(-1/6). + */ +static inline double +babl_pow_1_24 (double x) +{ + double y = init_newton (x, -1./12, 0.9976800269, 0.9885126933, 0.5908575383); + int i; + double z; + x = sqrt (x); + /* newton's method for x^(-1/6) */ + z = (1./6.) * x; + for (i = 0; i < 3; i++) + y = (7./6.) * y - z * ((y*y)*(y*y)*(y*y*y)); + return x*y; +} + +////////////////////////////////////////////// +/* a^b = exp(b*log(a)) + * + * Extracting the exponent from a float gives us an approximate log. + * Or better yet, reinterpret the bitpattern of the whole float as an int. + * + * However, the output values of 12throot vary by less than a factor of 2 + * over the domain we care about, so we only get log() that way, not exp(). + * + * Approximate exp() with a low-degree polynomial; not exactly equal to the + * Taylor series since we're minimizing maximum error over a certain finite + * domain. It's not worthwhile to use lots of terms, since Newton's method + * has a better convergence rate once you get reasonably close to the answer. + */ +static inline float +init_newtonf (float x, float exponent, float c0, float c1, float c2) +{ + int iexp; + float y = frexpf(x, &iexp); + y = 2*y+(iexp-2); + c1 *= M_LN2*exponent; + c2 *= M_LN2*M_LN2*exponent*exponent; + return y = c0 + c1*y + c2*y*y; +} + +/* Returns x^2.4 == (x*(x^(-1/5)))^3, using Newton's method for x^(-1/5). + */ +static inline float +babl_pow_24f (float x) +{ + float y = init_newtonf (x, -1.f/5, 0.9953189663f, 0.9594345146f, 0.6742970332f); + int i; + for (i = 0; i < 3; i++) + y = (1.f+1.f/5)*y - ((1./5)*x*(y*y))*((y*y)*(y*y)); + x *= y; + return x*x*x; +} + +/* Returns x^(1/2.4) == x*((x^(-1/6))^(1/2))^7, using Newton's method for x^(-1/6). + */ +static inline float +babl_pow_1_24f (float x) +{ + float y = init_newtonf (x, -1.f/12, 0.9976800269f, 0.9885126933f, 0.5908575383f); + int i; + float z; + x = sqrtf (x); + /* newton's method for x^(-1/6) */ + z = (1.f/6.f) * x; + for (i = 0; i < 3; i++) + y = (7.f/6.f) * y - z * ((y*y)*(y*y)*(y*y*y)); + return x*y; +} + + #endif diff --git a/babl/base/util.h b/babl/base/util.h index cfb17b0..3472523 100644 --- a/babl/base/util.h +++ b/babl/base/util.h @@ -78,6 +78,14 @@ babl_linear_to_gamma_2_2 (double value) return 1.055 * babl_pow_1_24 (value) - 0.055; return 12.92 * value; } +static inline float +babl_linear_to_gamma_2_2f (float value) +{ + if (value > 0.003130804954f) + return 1.055f * babl_pow_1_24f (value) - 0.055f; + return 12.92f * value; +} + static inline double babl_gamma_2_2_to_linear (double value) @@ -86,6 +94,13 @@ babl_gamma_2_2_to_linear (double value) return babl_pow_24 ((value + 0.055) / 1.055); return value / 12.92; } +static inline float +babl_gamma_2_2_to_linearf (float value) +{ + if (value > 0.04045f) + return babl_pow_24f ((value + 0.055f) / 1.055f); + return value / 12.92f; +} #else #define linear_to_gamma_2_2(value) (pow((value), (1.0F/2.2F))) diff --git a/config.guess b/config.guess index dbfb978..0967f2a 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2015 Free Software Foundation, Inc. +# Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2015-01-01' +timestamp='2016-04-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ timestamp='2015-01-01' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2015 Free Software Foundation, Inc. +Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) + arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ @@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -223,6 +237,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; @@ -235,6 +253,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -251,42 +272,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 @@ -359,16 +380,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build - SUN_ARCH="i386" + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` @@ -393,7 +414,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} @@ -618,13 +639,13 @@ EOF sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi @@ -663,11 +684,11 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build @@ -680,12 +701,12 @@ EOF # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} @@ -790,14 +811,14 @@ EOF echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) @@ -879,7 +900,7 @@ EOF exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix @@ -902,7 +923,7 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) @@ -933,6 +954,9 @@ EOF crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -945,6 +969,9 @@ EOF ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -1021,7 +1048,7 @@ EOF echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} @@ -1100,7 +1127,7 @@ EOF # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that + # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; @@ -1249,6 +1276,9 @@ EOF SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; @@ -1262,9 +1292,9 @@ EOF UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in @@ -1286,7 +1316,7 @@ EOF exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi @@ -1317,7 +1347,7 @@ EOF # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" @@ -1359,7 +1389,7 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos @@ -1370,6 +1400,9 @@ EOF x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; esac cat >&2 < header file. */ #undef HAVE_SYS_TYPES_H +/* Define to 1 if compiler supports __thread */ +#undef HAVE_TLS + /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H diff --git a/config.sub b/config.sub index 6467c95..8d39c4b 100755 --- a/config.sub +++ b/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2015 Free Software Foundation, Inc. +# Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2015-01-01' +timestamp='2016-03-30' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ timestamp='2015-01-01' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -53,8 +53,7 @@ timestamp='2015-01-01' me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. @@ -68,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2015 Free Software Foundation, Inc. +Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -117,7 +116,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os @@ -255,11 +254,12 @@ case $basic_machine in | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ + | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ @@ -305,7 +305,7 @@ case $basic_machine in | riscv32 | riscv64 \ | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -376,12 +376,13 @@ case $basic_machine in | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ @@ -428,12 +429,13 @@ case $basic_machine in | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -518,6 +520,9 @@ case $basic_machine in basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -1025,7 +1030,7 @@ case $basic_machine in ;; ppc64) basic_machine=powerpc64-unknown ;; - ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown @@ -1373,11 +1378,11 @@ case $os in | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ @@ -1393,7 +1398,8 @@ case $os in | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1525,6 +1531,8 @@ case $os in ;; -nacl*) ;; + -ios) + ;; -none) ;; *) diff --git a/configure b/configure index 6f38bf0..0931451 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for babl 0.1.18. +# Generated by GNU Autoconf 2.69 for babl 0.1.22. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='babl' PACKAGE_TARNAME='babl' -PACKAGE_VERSION='0.1.18' -PACKAGE_STRING='babl 0.1.18' +PACKAGE_VERSION='0.1.22' +PACKAGE_STRING='babl 0.1.22' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -778,6 +778,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -867,6 +868,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1119,6 +1121,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1256,7 +1267,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1369,7 +1380,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures babl 0.1.18 to adapt to many kinds of systems. +\`configure' configures babl 0.1.22 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1409,6 +1420,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1440,7 +1452,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of babl 0.1.18:";; + short | recursive ) echo "Configuration of babl 0.1.22:";; esac cat <<\_ACEOF @@ -1560,7 +1572,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -babl configure 0.1.18 +babl configure 0.1.22 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1925,7 +1937,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by babl $as_me 0.1.18, which was +It was created by babl $as_me 0.1.22, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2281,11 +2293,11 @@ ac_config_headers="$ac_config_headers config.h" BABL_MAJOR_VERSION=0 BABL_MINOR_VERSION=1 -BABL_MICRO_VERSION=18 +BABL_MICRO_VERSION=22 BABL_INTERFACE_AGE=1 -BABL_BINARY_AGE=118 -BABL_VERSION=0.1.18 -BABL_REAL_VERSION=0.1.18 +BABL_BINARY_AGE=122 +BABL_VERSION=0.1.22 +BABL_REAL_VERSION=0.1.22 BABL_API_VERSION=0.1 @@ -2320,7 +2332,7 @@ fi -BABL_LIBRARY_VERSION="117:1:117" +BABL_LIBRARY_VERSION="121:1:121" BABL_CURRENT_MINUS_AGE=0 @@ -2952,7 +2964,7 @@ fi # Define the identity of the package. PACKAGE='babl' - VERSION='0.1.18' + VERSION='0.1.22' # Some tools Automake needs. @@ -5560,7 +5572,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd*) +netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else @@ -9547,6 +9559,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie openbsd* | bitrig*) with_gnu_ld=no ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; esac ld_shlibs=yes @@ -9801,7 +9816,7 @@ _LT_EOF fi ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -10471,6 +10486,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi + link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -10492,7 +10508,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -11587,9 +11603,6 @@ fi # before this can be enabled. hardcode_into_libs=yes - # Add ABI-specific directories to the system library path. - sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" - # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command @@ -11598,7 +11611,7 @@ fi # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -11610,6 +11623,18 @@ fi dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -13410,6 +13435,40 @@ fi +################# +# Check for some not-so-common features +################# + +# babl_fish_reference(), create_name() would like this +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __thread" >&5 +$as_echo_n "checking for __thread... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +static __thread char buf1024; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +$as_echo "#define HAVE_TLS 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + + ######################## # Check for MMX assembly ######################## @@ -14795,7 +14854,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by babl $as_me 0.1.18, which was +This file was extended by babl $as_me 0.1.22, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14861,7 +14920,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -babl config.status 0.1.18 +babl config.status 0.1.22 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -15993,7 +16052,6 @@ $as_echo X"$file" | cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. diff --git a/configure.ac b/configure.ac index f813f56..77f9b0c 100644 --- a/configure.ac +++ b/configure.ac @@ -14,7 +14,7 @@ AC_PREREQ(2.54) m4_define([babl_major_version], [0]) m4_define([babl_minor_version], [1]) -m4_define([babl_micro_version], [18]) +m4_define([babl_micro_version], [22]) m4_define([babl_real_version], [babl_major_version.babl_minor_version.babl_micro_version]) m4_define([babl_version], [babl_real_version]) @@ -283,6 +283,22 @@ AM_CONDITIONAL(OS_UNIX, test "$os_win32" != "yes") dnl =========================================================================== +################# +# Check for some not-so-common features +################# + +# babl_fish_reference(), create_name() would like this +AC_MSG_CHECKING([for __thread]) +AC_LINK_IFELSE([AC_LANG_PROGRAM(, [static __thread char buf[1024];])], + [AC_DEFINE(HAVE_TLS, 1, + Define to 1 if compiler supports __thread) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + + +dnl =========================================================================== + + ######################## # Check for MMX assembly ######################## diff --git a/docs/Makefile.am b/docs/Makefile.am index 17d01ca..e53d9a9 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -13,8 +13,7 @@ DIST_SUBDIRS= graphics # # HTML_FILES = index-static.html \ - index.html \ - BablFishPath.html + index.html EXTRA_DIST= \ babl.css \ @@ -24,33 +23,18 @@ EXTRA_DIST= \ COPYING \ COPYING.LESSER -BUILT_EXTRA_DIST = index.html BablFishPath.html BablFishPath.txt +BUILT_EXTRA_DIST = index.html CLEANFILES = README changelog.rss DISTCLEANFILES = index-static.html $(BUILT_EXTRA_DIST) all: $(HTML_FILES) - -BablFishPath.html: $(babl_fish_path_dhtml) - echo -n "HTML:" - echo -n " $@" - export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $< > $@ &&\ - echo " [OK]" || echo " Fail" - -BablFishPath.txt: $(babl_fish_path_fitness) - echo -n "UTF8:" - echo -n " $@" - export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $< > $@ &&\ - echo " [OK]" || echo " Fail" - if [ "x"$$CRUCIBLE_ID != "x" ] ;then echo;echo;cat $@;echo;echo;fi - index.html: index-static.html \ $(babl_html_dump) \ $(top_srcdir)/AUTHORS \ $(top_srcdir)/TODO \ $(top_srcdir)/NEWS \ - BablFishPath.txt \ Makefile.am echo -n "HTML: $@" cp $< $@ @@ -60,7 +44,6 @@ index.html: index-static.html \ rm -f $$TMPFILE ) echo -n "." - $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ BablFishPath BablFishPath.txt $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ AUTHORS $(top_srcdir)/AUTHORS $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ TODO $(top_srcdir)/TODO $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ NEWS $(top_srcdir)/NEWS diff --git a/docs/Makefile.in b/docs/Makefile.in index ab49b72..8327ea8 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -319,6 +319,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -345,8 +346,7 @@ DIST_SUBDIRS = graphics # # HTML_FILES = index-static.html \ - index.html \ - BablFishPath.html + index.html EXTRA_DIST = \ babl.css \ @@ -356,7 +356,7 @@ EXTRA_DIST = \ COPYING \ COPYING.LESSER -BUILT_EXTRA_DIST = index.html BablFishPath.html BablFishPath.txt +BUILT_EXTRA_DIST = index.html CLEANFILES = README changelog.rss DISTCLEANFILES = index-static.html $(BUILT_EXTRA_DIST) all: all-recursive @@ -681,25 +681,11 @@ uninstall-am: all: $(HTML_FILES) -BablFishPath.html: $(babl_fish_path_dhtml) - echo -n "HTML:" - echo -n " $@" - export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $< > $@ &&\ - echo " [OK]" || echo " Fail" - -BablFishPath.txt: $(babl_fish_path_fitness) - echo -n "UTF8:" - echo -n " $@" - export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $< > $@ &&\ - echo " [OK]" || echo " Fail" - if [ "x"$$CRUCIBLE_ID != "x" ] ;then echo;echo;cat $@;echo;echo;fi - index.html: index-static.html \ $(babl_html_dump) \ $(top_srcdir)/AUTHORS \ $(top_srcdir)/TODO \ $(top_srcdir)/NEWS \ - BablFishPath.txt \ Makefile.am echo -n "HTML: $@" cp $< $@ @@ -709,7 +695,6 @@ index.html: index-static.html \ rm -f $$TMPFILE ) echo -n "." - $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ BablFishPath BablFishPath.txt $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ AUTHORS $(top_srcdir)/AUTHORS $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ TODO $(top_srcdir)/TODO $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ NEWS $(top_srcdir)/NEWS diff --git a/docs/graphics/Makefile.in b/docs/graphics/Makefile.in index 5484bb5..235e296 100644 --- a/docs/graphics/Makefile.in +++ b/docs/graphics/Makefile.in @@ -259,6 +259,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ diff --git a/docs/graphics/babl-a4poster.png b/docs/graphics/babl-a4poster.png index fa45bd8803c28cc8daff72fff119fcae9e48972a..8b21a08aa7d02e535f4f8aebd2c2346c2e8b84a9 100644 GIT binary patch literal 34824 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 version is also available. -

-
-
-

Environment

diff --git a/extensions/Makefile.am b/extensions/Makefile.am index 7ecb457..0aeb9b7 100644 --- a/extensions/Makefile.am +++ b/extensions/Makefile.am @@ -39,7 +39,7 @@ ext_LTLIBRARIES = \ two-table.la \ ycbcr.la -cairo_la_SOURCES = cairo.c cairo-tables.h +cairo_la_SOURCES = cairo.c CIE_la_SOURCES = CIE.c simple_la_SOURCES = simple.c float_half_la_SOURCES = float-half.c diff --git a/extensions/Makefile.in b/extensions/Makefile.in index c9f212e..48926ce 100644 --- a/extensions/Makefile.in +++ b/extensions/Makefile.in @@ -442,6 +442,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -489,7 +490,7 @@ ext_LTLIBRARIES = \ two-table.la \ ycbcr.la -cairo_la_SOURCES = cairo.c cairo-tables.h +cairo_la_SOURCES = cairo.c CIE_la_SOURCES = CIE.c simple_la_SOURCES = simple.c float_half_la_SOURCES = float-half.c diff --git a/extensions/cairo-tables.h b/extensions/cairo-tables.h deleted file mode 100644 index d814b73..0000000 --- a/extensions/cairo-tables.h +++ /dev/null @@ -1,5027 +0,0 @@ -/* Gamma table generated from a babl conversion of Y to Y' */ -static const unsigned short linear_to_gamma16[65536] = -{ -0,13,26,39,52,65,78,90,103,116,129,142,155,168,181,194,207,220,233,245,258,271, -284,297,310,323,336,349,362,375,388,401,413,426,439,452,465,478,491,504,517,530, -543,556,568,581,594,607,620,633,646,659,672,685,698,711,724,736,749,762,775,788, -801,814,827,840,853,866,879,891,904,917,930,943,956,969,982,995,1008,1021,1034, -1047,1059,1072,1085,1098,1111,1124,1137,1150,1163,1176,1189,1202,1214,1227,1240, -1253,1266,1279,1292,1305,1318,1331,1344,1357,1370,1382,1395,1408,1421,1434,1447, -1460,1473,1486,1499,1512,1525,1537,1550,1563,1576,1589,1602,1615,1628,1641,1654, -1667,1680,1693,1705,1718,1731,1744,1757,1770,1783,1796,1809,1822,1835,1848,1860, -1873,1886,1899,1912,1925,1938,1951,1964,1977,1990,2003,2016,2028,2041,2054,2067, -2080,2093,2106,2119,2132,2145,2158,2171,2183,2196,2209,2222,2235,2248,2261,2274, -2287,2300,2313,2326,2339,2351,2364,2377,2390,2403,2416,2429,2442,2455,2468,2481, -2494,2506,2519,2532,2545,2558,2571,2584,2597,2610,2623,2636,2649,2661,2674,2687, -2699,2712,2724,2737,2749,2762,2774,2786,2799,2811,2823,2835,2848,2860,2872,2884, -2896,2908,2920,2932,2944,2956,2968,2979,2991,3003,3015,3027,3038,3050,3062,3073, -3085,3096,3108,3119,3131,3142,3154,3165,3176,3188,3199,3210,3222,3233,3244,3255, -3266,3277,3288,3300,3311,3322,3333,3344,3355,3366,3376,3387,3398,3409,3420,3431, -3441,3452,3463,3474,3484,3495,3505,3516,3527,3537,3548,3558,3569,3579,3590,3600, -3611,3621,3631,3642,3652,3662,3673,3683,3693,3703,3714,3724,3734,3744,3754,3764, -3774,3784,3795,3805,3815,3825,3835,3844,3854,3864,3874,3884,3894,3904,3914,3923, -3933,3943,3953,3963,3972,3982,3992,4001,4011,4021,4030,4040,4049,4059,4069,4078, -4088,4097,4107,4116,4126,4135,4144,4154,4163,4173,4182,4191,4201,4210,4219,4228, -4238,4247,4256,4265,4275,4284,4293,4302,4311,4320,4330,4339,4348,4357,4366,4375, -4384,4393,4402,4411,4420,4429,4438,4447,4456,4465,4473,4482,4491,4500,4509,4518, -4526,4535,4544,4553,4562,4570,4579,4588,4596,4605,4614,4622,4631,4640,4648,4657, -4666,4674,4683,4691,4700,4708,4717,4725,4734,4742,4751,4759,4768,4776,4785,4793, -4801,4810,4818,4827,4835,4843,4852,4860,4868,4877,4885,4893,4901,4910,4918,4926, -4934,4943,4951,4959,4967,4975,4984,4992,5000,5008,5016,5024,5032,5040,5048,5056, -5064,5073,5081,5089,5097,5105,5113,5121,5129,5136,5144,5152,5160,5168,5176,5184, -5192,5200,5208,5215,5223,5231,5239,5247,5255,5262,5270,5278,5286,5294,5301,5309, -5317,5324,5332,5340,5348,5355,5363,5371,5378,5386,5394,5401,5409,5416,5424,5432, -5439,5447,5454,5462,5469,5477,5485,5492,5500,5507,5515,5522,5530,5537,5545,5552, -5559,5567,5574,5582,5589,5597,5604,5611,5619,5626,5633,5641,5648,5655,5663,5670, -5677,5685,5692,5699,5707,5714,5721,5728,5736,5743,5750,5757,5765,5772,5779,5786, -5793,5801,5808,5815,5822,5829,5836,5843,5851,5858,5865,5872,5879,5886,5893,5900, -5907,5914,5921,5929,5936,5943,5950,5957,5964,5971,5978,5985,5992,5999,6006,6013, -6019,6026,6033,6040,6047,6054,6061,6068,6075,6082,6089,6096,6102,6109,6116,6123, -6130,6137,6143,6150,6157,6164,6171,6178,6184,6191,6198,6205,6211,6218,6225,6232, -6238,6245,6252,6259,6265,6272,6279,6285,6292,6299,6305,6312,6319,6325,6332,6339, -6345,6352,6359,6365,6372,6378,6385,6392,6398,6405,6411,6418,6424,6431,6438,6444, -6451,6457,6464,6470,6477,6483,6490,6496,6503,6509,6516,6522,6529,6535,6542,6548, -6554,6561,6567,6574,6580,6587,6593,6599,6606,6612,6619,6625,6631,6638,6644,6650, -6657,6663,6670,6676,6682,6689,6695,6701,6708,6714,6720,6726,6733,6739,6745,6752, -6758,6764,6770,6777,6783,6789,6795,6802,6808,6814,6820,6826,6833,6839,6845,6851, -6857,6864,6870,6876,6882,6888,6894,6901,6907,6913,6919,6925,6931,6937,6943,6950, -6956,6962,6968,6974,6980,6986,6992,6998,7004,7010,7016,7023,7029,7035,7041,7047, -7053,7059,7065,7071,7077,7083,7089,7095,7101,7107,7113,7119,7125,7131,7137,7143, -7148,7154,7160,7166,7172,7178,7184,7190,7196,7202,7208,7214,7220,7225,7231,7237, -7243,7249,7255,7261,7267,7272,7278,7284,7290,7296,7302,7307,7313,7319,7325,7331, -7337,7342,7348,7354,7360,7366,7371,7377,7383,7389,7394,7400,7406,7412,7417,7423, -7429,7435,7440,7446,7452,7458,7463,7469,7475,7480,7486,7492,7498,7503,7509,7515, -7520,7526,7532,7537,7543,7549,7554,7560,7566,7571,7577,7582,7588,7594,7599,7605, -7611,7616,7622,7627,7633,7639,7644,7650,7655,7661,7666,7672,7678,7683,7689,7694, -7700,7705,7711,7716,7722,7727,7733,7739,7744,7750,7755,7761,7766,7772,7777,7783, -7788,7794,7799,7805,7810,7815,7821,7826,7832,7837,7843,7848,7854,7859,7865,7870, -7875,7881,7886,7892,7897,7902,7908,7913,7919,7924,7930,7935,7940,7946,7951,7956, -7962,7967,7973,7978,7983,7989,7994,7999,8005,8010,8015,8021,8026,8031,8037,8042, -8047,8053,8058,8063,8069,8074,8079,8084,8090,8095,8100,8106,8111,8116,8121,8127, -8132,8137,8142,8148,8153,8158,8164,8169,8174,8179,8184,8190,8195,8200,8205,8211, -8216,8221,8226,8231,8237,8242,8247,8252,8257,8263,8268,8273,8278,8283,8288,8294, -8299,8304,8309,8314,8319,8325,8330,8335,8340,8345,8350,8355,8360,8366,8371,8376, -8381,8386,8391,8396,8401,8406,8412,8417,8422,8427,8432,8437,8442,8447,8452,8457, -8462,8467,8472,8478,8483,8488,8493,8498,8503,8508,8513,8518,8523,8528,8533,8538, -8543,8548,8553,8558,8563,8568,8573,8578,8583,8588,8593,8598,8603,8608,8613,8618, -8623,8628,8633,8638,8643,8648,8653,8658,8663,8667,8672,8677,8682,8687,8692,8697, -8702,8707,8712,8717,8722,8727,8732,8736,8741,8746,8751,8756,8761,8766,8771,8776, -8780,8785,8790,8795,8800,8805,8810,8815,8819,8824,8829,8834,8839,8844,8849,8853, -8858,8863,8868,8873,8878,8882,8887,8892,8897,8902,8907,8911,8916,8921,8926,8931, -8935,8940,8945,8950,8955,8959,8964,8969,8974,8978,8983,8988,8993,8998,9002,9007, -9012,9017,9021,9026,9031,9036,9040,9045,9050,9055,9059,9064,9069,9073,9078,9083, -9088,9092,9097,9102,9106,9111,9116,9121,9125,9130,9135,9139,9144,9149,9153,9158, -9163,9167,9172,9177,9181,9186,9191,9195,9200,9205,9209,9214,9219,9223,9228,9233, -9237,9242,9247,9251,9256,9260,9265,9270,9274,9279,9284,9288,9293,9297,9302,9307, -9311,9316,9320,9325,9330,9334,9339,9343,9348,9353,9357,9362,9366,9371,9376,9380, -9385,9389,9394,9398,9403,9407,9412,9417,9421,9426,9430,9435,9439,9444,9448,9453, -9457,9462,9466,9471,9476,9480,9485,9489,9494,9498,9503,9507,9512,9516,9521,9525, -9530,9534,9539,9543,9548,9552,9557,9561,9566,9570,9575,9579,9583,9588,9592,9597, -9601,9606,9610,9615,9619,9624,9628,9633,9637,9641,9646,9650,9655,9659,9664,9668, -9672,9677,9681,9686,9690,9695,9699,9703,9708,9712,9717,9721,9725,9730,9734,9739, -9743,9747,9752,9756,9761,9765,9769,9774,9778,9783,9787,9791,9796,9800,9804,9809, -9813,9818,9822,9826,9831,9835,9839,9844,9848,9852,9857,9861,9865,9870,9874,9878, -9883,9887,9891,9896,9900,9904,9909,9913,9917,9922,9926,9930,9935,9939,9943,9947, -9952,9956,9960,9965,9969,9973,9978,9982,9986,9990,9995,9999,10003,10008,10012, -10016,10020,10025,10029,10033,10037,10042,10046,10050,10055,10059,10063,10067, -10072,10076,10080,10084,10088,10093,10097,10101,10105,10110,10114,10118,10122, -10127,10131,10135,10139,10143,10148,10152,10156,10160,10165,10169,10173,10177, -10181,10186,10190,10194,10198,10202,10207,10211,10215,10219,10223,10227,10232, -10236,10240,10244,10248,10253,10257,10261,10265,10269,10273,10278,10282,10286, -10290,10294,10298,10302,10307,10311,10315,10319,10323,10327,10332,10336,10340, -10344,10348,10352,10356,10360,10365,10369,10373,10377,10381,10385,10389,10393, -10398,10402,10406,10410,10414,10418,10422,10426,10430,10434,10439,10443,10447, -10451,10455,10459,10463,10467,10471,10475,10479,10483,10488,10492,10496,10500, -10504,10508,10512,10516,10520,10524,10528,10532,10536,10540,10544,10548,10553, -10557,10561,10565,10569,10573,10577,10581,10585,10589,10593,10597,10601,10605, -10609,10613,10617,10621,10625,10629,10633,10637,10641,10645,10649,10653,10657, -10661,10665,10669,10673,10677,10681,10685,10689,10693,10697,10701,10705,10709, -10713,10717,10721,10725,10729,10733,10737,10741,10745,10749,10753,10757,10761, -10765,10769,10773,10777,10781,10785,10789,10793,10797,10800,10804,10808,10812, -10816,10820,10824,10828,10832,10836,10840,10844,10848,10852,10856,10860,10864, -10867,10871,10875,10879,10883,10887,10891,10895,10899,10903,10907,10911,10914, -10918,10922,10926,10930,10934,10938,10942,10946,10950,10953,10957,10961,10965, -10969,10973,10977,10981,10985,10988,10992,10996,11000,11004,11008,11012,11016, -11019,11023,11027,11031,11035,11039,11043,11046,11050,11054,11058,11062,11066, -11070,11073,11077,11081,11085,11089,11093,11097,11100,11104,11108,11112,11116, -11120,11123,11127,11131,11135,11139,11143,11146,11150,11154,11158,11162,11165, -11169,11173,11177,11181,11184,11188,11192,11196,11200,11204,11207,11211,11215, -11219,11223,11226,11230,11234,11238,11241,11245,11249,11253,11257,11260,11264, -11268,11272,11276,11279,11283,11287,11291,11294,11298,11302,11306,11309,11313, -11317,11321,11324,11328,11332,11336,11339,11343,11347,11351,11354,11358,11362, -11366,11369,11373,11377,11381,11384,11388,11392,11396,11399,11403,11407,11411, -11414,11418,11422,11425,11429,11433,11437,11440,11444,11448,11452,11455,11459, -11463,11466,11470,11474,11477,11481,11485,11489,11492,11496,11500,11503,11507, -11511,11514,11518,11522,11526,11529,11533,11537,11540,11544,11548,11551,11555, -11559,11562,11566,11570,11573,11577,11581,11584,11588,11592,11595,11599,11603, -11606,11610,11614,11617,11621,11625,11628,11632,11636,11639,11643,11647,11650, -11654,11658,11661,11665,11668,11672,11676,11679,11683,11687,11690,11694,11698, -11701,11705,11708,11712,11716,11719,11723,11727,11730,11734,11737,11741,11745, -11748,11752,11755,11759,11763,11766,11770,11774,11777,11781,11784,11788,11792, -11795,11799,11802,11806,11810,11813,11817,11820,11824,11827,11831,11835,11838, -11842,11845,11849,11853,11856,11860,11863,11867,11870,11874,11878,11881,11885, -11888,11892,11895,11899,11903,11906,11910,11913,11917,11920,11924,11927,11931, -11935,11938,11942,11945,11949,11952,11956,11959,11963,11967,11970,11974,11977, -11981,11984,11988,11991,11995,11998,12002,12005,12009,12012,12016,12020,12023, -12027,12030,12034,12037,12041,12044,12048,12051,12055,12058,12062,12065,12069, -12072,12076,12079,12083,12086,12090,12093,12097,12100,12104,12107,12111,12114, -12118,12121,12125,12128,12132,12135,12139,12142,12146,12149,12153,12156,12160, -12163,12167,12170,12174,12177,12181,12184,12188,12191,12195,12198,12201,12205, -12208,12212,12215,12219,12222,12226,12229,12233,12236,12240,12243,12246,12250, -12253,12257,12260,12264,12267,12271,12274,12278,12281,12284,12288,12291,12295, -12298,12302,12305,12309,12312,12315,12319,12322,12326,12329,12333,12336,12339, -12343,12346,12350,12353,12357,12360,12363,12367,12370,12374,12377,12380,12384, -12387,12391,12394,12398,12401,12404,12408,12411,12415,12418,12421,12425,12428, -12432,12435,12438,12442,12445,12449,12452,12455,12459,12462,12466,12469,12472, -12476,12479,12482,12486,12489,12493,12496,12499,12503,12506,12510,12513,12516, -12520,12523,12526,12530,12533,12537,12540,12543,12547,12550,12553,12557,12560, -12563,12567,12570,12574,12577,12580,12584,12587,12590,12594,12597,12600,12604, -12607,12610,12614,12617,12620,12624,12627,12630,12634,12637,12640,12644,12647, -12651,12654,12657,12661,12664,12667,12671,12674,12677,12680,12684,12687,12690, -12694,12697,12700,12704,12707,12710,12714,12717,12720,12724,12727,12730,12734, -12737,12740,12744,12747,12750,12753,12757,12760,12763,12767,12770,12773,12777, -12780,12783,12787,12790,12793,12796,12800,12803,12806,12810,12813,12816,12819, -12823,12826,12829,12833,12836,12839,12842,12846,12849,12852,12856,12859,12862, -12865,12869,12872,12875,12878,12882,12885,12888,12892,12895,12898,12901,12905, -12908,12911,12914,12918,12921,12924,12927,12931,12934,12937,12940,12944,12947, -12950,12953,12957,12960,12963,12966,12970,12973,12976,12979,12983,12986,12989, -12992,12996,12999,13002,13005,13009,13012,13015,13018,13022,13025,13028,13031, -13034,13038,13041,13044,13047,13051,13054,13057,13060,13064,13067,13070,13073, -13076,13080,13083,13086,13089,13092,13096,13099,13102,13105,13109,13112,13115, -13118,13121,13125,13128,13131,13134,13137,13141,13144,13147,13150,13153,13157, -13160,13163,13166,13169,13173,13176,13179,13182,13185,13188,13192,13195,13198, -13201,13204,13208,13211,13214,13217,13220,13224,13227,13230,13233,13236,13239, -13243,13246,13249,13252,13255,13258,13262,13265,13268,13271,13274,13277,13281, -13284,13287,13290,13293,13296,13300,13303,13306,13309,13312,13315,13318,13322, -13325,13328,13331,13334,13337,13341,13344,13347,13350,13353,13356,13359,13363, -13366,13369,13372,13375,13378,13381,13385,13388,13391,13394,13397,13400,13403, -13406,13410,13413,13416,13419,13422,13425,13428,13431,13435,13438,13441,13444, -13447,13450,13453,13456,13460,13463,13466,13469,13472,13475,13478,13481,13484, -13488,13491,13494,13497,13500,13503,13506,13509,13512,13516,13519,13522,13525, -13528,13531,13534,13537,13540,13543,13547,13550,13553,13556,13559,13562,13565, -13568,13571,13574,13577,13581,13584,13587,13590,13593,13596,13599,13602,13605, -13608,13611,13614,13618,13621,13624,13627,13630,13633,13636,13639,13642,13645, -13648,13651,13654,13657,13661,13664,13667,13670,13673,13676,13679,13682,13685, -13688,13691,13694,13697,13700,13703,13706,13709,13713,13716,13719,13722,13725, -13728,13731,13734,13737,13740,13743,13746,13749,13752,13755,13758,13761,13764, -13767,13770,13773,13776,13780,13783,13786,13789,13792,13795,13798,13801,13804, -13807,13810,13813,13816,13819,13822,13825,13828,13831,13834,13837,13840,13843, -13846,13849,13852,13855,13858,13861,13864,13867,13870,13873,13876,13879,13882, -13885,13888,13891,13894,13897,13900,13903,13906,13909,13912,13915,13918,13921, -13924,13927,13930,13933,13936,13939,13942,13945,13948,13951,13954,13957,13960, -13963,13966,13969,13972,13975,13978,13981,13984,13987,13990,13993,13996,13999, -14002,14005,14008,14011,14014,14017,14020,14023,14026,14029,14032,14035,14038, -14041,14044,14047,14050,14053,14056,14059,14062,14065,14068,14071,14074,14077, -14080,14083,14086,14088,14091,14094,14097,14100,14103,14106,14109,14112,14115, -14118,14121,14124,14127,14130,14133,14136,14139,14142,14145,14148,14151,14154, -14156,14159,14162,14165,14168,14171,14174,14177,14180,14183,14186,14189,14192, -14195,14198,14201,14204,14206,14209,14212,14215,14218,14221,14224,14227,14230, -14233,14236,14239,14242,14245,14247,14250,14253,14256,14259,14262,14265,14268, -14271,14274,14277,14280,14283,14285,14288,14291,14294,14297,14300,14303,14306, -14309,14312,14315,14318,14320,14323,14326,14329,14332,14335,14338,14341,14344, -14347,14350,14352,14355,14358,14361,14364,14367,14370,14373,14376,14379,14381, -14384,14387,14390,14393,14396,14399,14402,14405,14407,14410,14413,14416,14419, -14422,14425,14428,14431,14433,14436,14439,14442,14445,14448,14451,14454,14456, -14459,14462,14465,14468,14471,14474,14477,14479,14482,14485,14488,14491,14494, -14497,14500,14502,14505,14508,14511,14514,14517,14520,14523,14525,14528,14531, -14534,14537,14540,14543,14545,14548,14551,14554,14557,14560,14563,14565,14568, -14571,14574,14577,14580,14583,14585,14588,14591,14594,14597,14600,14602,14605, -14608,14611,14614,14617,14620,14622,14625,14628,14631,14634,14637,14639,14642, -14645,14648,14651,14654,14656,14659,14662,14665,14668,14671,14673,14676,14679, -14682,14685,14688,14690,14693,14696,14699,14702,14705,14707,14710,14713,14716, -14719,14721,14724,14727,14730,14733,14736,14738,14741,14744,14747,14750,14752, -14755,14758,14761,14764,14767,14769,14772,14775,14778,14781,14783,14786,14789, -14792,14795,14797,14800,14803,14806,14809,14811,14814,14817,14820,14823,14825, -14828,14831,14834,14837,14839,14842,14845,14848,14851,14853,14856,14859,14862, -14865,14867,14870,14873,14876,14878,14881,14884,14887,14890,14892,14895,14898, -14901,14904,14906,14909,14912,14915,14917,14920,14923,14926,14929,14931,14934, -14937,14940,14942,14945,14948,14951,14954,14956,14959,14962,14965,14967,14970, -14973,14976,14978,14981,14984,14987,14990,14992,14995,14998,15001,15003,15006, -15009,15012,15014,15017,15020,15023,15025,15028,15031,15034,15036,15039,15042, -15045,15047,15050,15053,15056,15058,15061,15064,15067,15069,15072,15075,15078, -15080,15083,15086,15089,15091,15094,15097,15100,15102,15105,15108,15111,15113, -15116,15119,15122,15124,15127,15130,15132,15135,15138,15141,15143,15146,15149, -15152,15154,15157,15160,15163,15165,15168,15171,15173,15176,15179,15182,15184, -15187,15190,15192,15195,15198,15201,15203,15206,15209,15212,15214,15217,15220, -15222,15225,15228,15231,15233,15236,15239,15241,15244,15247,15250,15252,15255, -15258,15260,15263,15266,15269,15271,15274,15277,15279,15282,15285,15287,15290, -15293,15296,15298,15301,15304,15306,15309,15312,15314,15317,15320,15323,15325, -15328,15331,15333,15336,15339,15341,15344,15347,15349,15352,15355,15358,15360, -15363,15366,15368,15371,15374,15376,15379,15382,15384,15387,15390,15392,15395, -15398,15401,15403,15406,15409,15411,15414,15417,15419,15422,15425,15427,15430, -15433,15435,15438,15441,15443,15446,15449,15451,15454,15457,15459,15462,15465, -15467,15470,15473,15475,15478,15481,15483,15486,15489,15491,15494,15497,15499, -15502,15505,15507,15510,15513,15515,15518,15521,15523,15526,15529,15531,15534, -15537,15539,15542,15544,15547,15550,15552,15555,15558,15560,15563,15566,15568, -15571,15574,15576,15579,15582,15584,15587,15590,15592,15595,15597,15600,15603, -15605,15608,15611,15613,15616,15619,15621,15624,15626,15629,15632,15634,15637, -15640,15642,15645,15648,15650,15653,15655,15658,15661,15663,15666,15669,15671, -15674,15676,15679,15682,15684,15687,15690,15692,15695,15697,15700,15703,15705, -15708,15711,15713,15716,15718,15721,15724,15726,15729,15732,15734,15737,15739, -15742,15745,15747,15750,15752,15755,15758,15760,15763,15766,15768,15771,15773, -15776,15779,15781,15784,15786,15789,15792,15794,15797,15799,15802,15805,15807, -15810,15812,15815,15818,15820,15823,15825,15828,15831,15833,15836,15838,15841, -15844,15846,15849,15851,15854,15857,15859,15862,15864,15867,15870,15872,15875, -15877,15880,15882,15885,15888,15890,15893,15895,15898,15901,15903,15906,15908, -15911,15914,15916,15919,15921,15924,15926,15929,15932,15934,15937,15939,15942, -15944,15947,15950,15952,15955,15957,15960,15962,15965,15968,15970,15973,15975, -15978,15980,15983,15986,15988,15991,15993,15996,15998,16001,16004,16006,16009, -16011,16014,16016,16019,16022,16024,16027,16029,16032,16034,16037,16039,16042, -16045,16047,16050,16052,16055,16057,16060,16063,16065,16068,16070,16073,16075, -16078,16080,16083,16085,16088,16091,16093,16096,16098,16101,16103,16106,16108, -16111,16114,16116,16119,16121,16124,16126,16129,16131,16134,16136,16139,16141, -16144,16147,16149,16152,16154,16157,16159,16162,16164,16167,16169,16172,16174, -16177,16180,16182,16185,16187,16190,16192,16195,16197,16200,16202,16205,16207, -16210,16212,16215,16218,16220,16223,16225,16228,16230,16233,16235,16238,16240, -16243,16245,16248,16250,16253,16255,16258,16260,16263,16265,16268,16270,16273, -16276,16278,16281,16283,16286,16288,16291,16293,16296,16298,16301,16303,16306, -16308,16311,16313,16316,16318,16321,16323,16326,16328,16331,16333,16336,16338, -16341,16343,16346,16348,16351,16353,16356,16358,16361,16363,16366,16368,16371, -16373,16376,16378,16381,16383,16386,16388,16391,16393,16396,16398,16401,16403, -16406,16408,16411,16413,16416,16418,16421,16423,16426,16428,16431,16433,16436, -16438,16441,16443,16446,16448,16451,16453,16456,16458,16461,16463,16466,16468, -16471,16473,16475,16478,16480,16483,16485,16488,16490,16493,16495,16498,16500, -16503,16505,16508,16510,16513,16515,16518,16520,16523,16525,16527,16530,16532, -16535,16537,16540,16542,16545,16547,16550,16552,16555,16557,16560,16562,16565, -16567,16569,16572,16574,16577,16579,16582,16584,16587,16589,16592,16594,16597, -16599,16601,16604,16606,16609,16611,16614,16616,16619,16621,16624,16626,16629, -16631,16633,16636,16638,16641,16643,16646,16648,16651,16653,16656,16658,16660, -16663,16665,16668,16670,16673,16675,16678,16680,16682,16685,16687,16690,16692, -16695,16697,16700,16702,16704,16707,16709,16712,16714,16717,16719,16722,16724, -16726,16729,16731,16734,16736,16739,16741,16743,16746,16748,16751,16753,16756, -16758,16761,16763,16765,16768,16770,16773,16775,16778,16780,16782,16785,16787, -16790,16792,16795,16797,16799,16802,16804,16807,16809,16812,16814,16816,16819, -16821,16824,16826,16829,16831,16833,16836,16838,16841,16843,16845,16848,16850, -16853,16855,16858,16860,16862,16865,16867,16870,16872,16874,16877,16879,16882, -16884,16887,16889,16891,16894,16896,16899,16901,16903,16906,16908,16911,16913, -16915,16918,16920,16923,16925,16927,16930,16932,16935,16937,16940,16942,16944, -16947,16949,16952,16954,16956,16959,16961,16964,16966,16968,16971,16973,16976, -16978,16980,16983,16985,16988,16990,16992,16995,16997,16999,17002,17004,17007, -17009,17011,17014,17016,17019,17021,17023,17026,17028,17031,17033,17035,17038, -17040,17043,17045,17047,17050,17052,17054,17057,17059,17062,17064,17066,17069, -17071,17074,17076,17078,17081,17083,17085,17088,17090,17093,17095,17097,17100, -17102,17104,17107,17109,17112,17114,17116,17119,17121,17123,17126,17128,17131, -17133,17135,17138,17140,17142,17145,17147,17150,17152,17154,17157,17159,17161, -17164,17166,17168,17171,17173,17176,17178,17180,17183,17185,17187,17190,17192, -17194,17197,17199,17202,17204,17206,17209,17211,17213,17216,17218,17220,17223, -17225,17228,17230,17232,17235,17237,17239,17242,17244,17246,17249,17251,17253, -17256,17258,17260,17263,17265,17268,17270,17272,17275,17277,17279,17282,17284, -17286,17289,17291,17293,17296,17298,17300,17303,17305,17307,17310,17312,17315, -17317,17319,17322,17324,17326,17329,17331,17333,17336,17338,17340,17343,17345, -17347,17350,17352,17354,17357,17359,17361,17364,17366,17368,17371,17373,17375, -17378,17380,17382,17385,17387,17389,17392,17394,17396,17399,17401,17403,17406, -17408,17410,17413,17415,17417,17420,17422,17424,17427,17429,17431,17434,17436, -17438,17441,17443,17445,17448,17450,17452,17454,17457,17459,17461,17464,17466, -17468,17471,17473,17475,17478,17480,17482,17485,17487,17489,17492,17494,17496, -17499,17501,17503,17505,17508,17510,17512,17515,17517,17519,17522,17524,17526, -17529,17531,17533,17536,17538,17540,17542,17545,17547,17549,17552,17554,17556, -17559,17561,17563,17566,17568,17570,17572,17575,17577,17579,17582,17584,17586, -17589,17591,17593,17595,17598,17600,17602,17605,17607,17609,17612,17614,17616, -17618,17621,17623,17625,17628,17630,17632,17635,17637,17639,17641,17644,17646, -17648,17651,17653,17655,17657,17660,17662,17664,17667,17669,17671,17673,17676, -17678,17680,17683,17685,17687,17689,17692,17694,17696,17699,17701,17703,17705, -17708,17710,17712,17715,17717,17719,17721,17724,17726,17728,17731,17733,17735, -17737,17740,17742,17744,17747,17749,17751,17753,17756,17758,17760,17762,17765, -17767,17769,17772,17774,17776,17778,17781,17783,17785,17787,17790,17792,17794, -17797,17799,17801,17803,17806,17808,17810,17812,17815,17817,17819,17821,17824, -17826,17828,17831,17833,17835,17837,17840,17842,17844,17846,17849,17851,17853, -17855,17858,17860,17862,17864,17867,17869,17871,17874,17876,17878,17880,17883, -17885,17887,17889,17892,17894,17896,17898,17901,17903,17905,17907,17910,17912, -17914,17916,17919,17921,17923,17925,17928,17930,17932,17934,17937,17939,17941, -17943,17946,17948,17950,17952,17955,17957,17959,17961,17964,17966,17968,17970, -17973,17975,17977,17979,17982,17984,17986,17988,17991,17993,17995,17997,18000, -18002,18004,18006,18008,18011,18013,18015,18017,18020,18022,18024,18026,18029, -18031,18033,18035,18038,18040,18042,18044,18046,18049,18051,18053,18055,18058, -18060,18062,18064,18067,18069,18071,18073,18075,18078,18080,18082,18084,18087, -18089,18091,18093,18096,18098,18100,18102,18104,18107,18109,18111,18113,18116, -18118,18120,18122,18124,18127,18129,18131,18133,18136,18138,18140,18142,18144, -18147,18149,18151,18153,18156,18158,18160,18162,18164,18167,18169,18171,18173, -18175,18178,18180,18182,18184,18187,18189,18191,18193,18195,18198,18200,18202, -18204,18206,18209,18211,18213,18215,18218,18220,18222,18224,18226,18229,18231, -18233,18235,18237,18240,18242,18244,18246,18248,18251,18253,18255,18257,18259, -18262,18264,18266,18268,18270,18273,18275,18277,18279,18281,18284,18286,18288, -18290,18292,18295,18297,18299,18301,18303,18306,18308,18310,18312,18314,18317, -18319,18321,18323,18325,18328,18330,18332,18334,18336,18339,18341,18343,18345, -18347,18349,18352,18354,18356,18358,18360,18363,18365,18367,18369,18371,18374, -18376,18378,18380,18382,18385,18387,18389,18391,18393,18395,18398,18400,18402, -18404,18406,18409,18411,18413,18415,18417,18419,18422,18424,18426,18428,18430, -18433,18435,18437,18439,18441,18443,18446,18448,18450,18452,18454,18456,18459, -18461,18463,18465,18467,18470,18472,18474,18476,18478,18480,18483,18485,18487, -18489,18491,18493,18496,18498,18500,18502,18504,18506,18509,18511,18513,18515, -18517,18519,18522,18524,18526,18528,18530,18532,18535,18537,18539,18541,18543, -18545,18548,18550,18552,18554,18556,18558,18561,18563,18565,18567,18569,18571, -18574,18576,18578,18580,18582,18584,18586,18589,18591,18593,18595,18597,18599, -18602,18604,18606,18608,18610,18612,18614,18617,18619,18621,18623,18625,18627, -18630,18632,18634,18636,18638,18640,18642,18645,18647,18649,18651,18653,18655, -18658,18660,18662,18664,18666,18668,18670,18673,18675,18677,18679,18681,18683, -18685,18688,18690,18692,18694,18696,18698,18700,18703,18705,18707,18709,18711, -18713,18715,18718,18720,18722,18724,18726,18728,18730,18733,18735,18737,18739, -18741,18743,18745,18747,18750,18752,18754,18756,18758,18760,18762,18765,18767, -18769,18771,18773,18775,18777,18779,18782,18784,18786,18788,18790,18792,18794, -18797,18799,18801,18803,18805,18807,18809,18811,18814,18816,18818,18820,18822, -18824,18826,18828,18831,18833,18835,18837,18839,18841,18843,18845,18848,18850, -18852,18854,18856,18858,18860,18862,18865,18867,18869,18871,18873,18875,18877, -18879,18881,18884,18886,18888,18890,18892,18894,18896,18898,18901,18903,18905, -18907,18909,18911,18913,18915,18917,18920,18922,18924,18926,18928,18930,18932, -18934,18936,18939,18941,18943,18945,18947,18949,18951,18953,18955,18958,18960, -18962,18964,18966,18968,18970,18972,18974,18977,18979,18981,18983,18985,18987, -18989,18991,18993,18995,18998,19000,19002,19004,19006,19008,19010,19012,19014, -19016,19019,19021,19023,19025,19027,19029,19031,19033,19035,19037,19040,19042, -19044,19046,19048,19050,19052,19054,19056,19058,19061,19063,19065,19067,19069, -19071,19073,19075,19077,19079,19081,19084,19086,19088,19090,19092,19094,19096, -19098,19100,19102,19104,19107,19109,19111,19113,19115,19117,19119,19121,19123, -19125,19127,19130,19132,19134,19136,19138,19140,19142,19144,19146,19148,19150, -19152,19155,19157,19159,19161,19163,19165,19167,19169,19171,19173,19175,19177, -19180,19182,19184,19186,19188,19190,19192,19194,19196,19198,19200,19202,19204, -19207,19209,19211,19213,19215,19217,19219,19221,19223,19225,19227,19229,19231, -19233,19236,19238,19240,19242,19244,19246,19248,19250,19252,19254,19256,19258, -19260,19262,19265,19267,19269,19271,19273,19275,19277,19279,19281,19283,19285, -19287,19289,19291,19293,19296,19298,19300,19302,19304,19306,19308,19310,19312, -19314,19316,19318,19320,19322,19324,19327,19329,19331,19333,19335,19337,19339, -19341,19343,19345,19347,19349,19351,19353,19355,19357,19359,19362,19364,19366, -19368,19370,19372,19374,19376,19378,19380,19382,19384,19386,19388,19390,19392, -19394,19396,19398,19401,19403,19405,19407,19409,19411,19413,19415,19417,19419, -19421,19423,19425,19427,19429,19431,19433,19435,19437,19439,19442,19444,19446, -19448,19450,19452,19454,19456,19458,19460,19462,19464,19466,19468,19470,19472, -19474,19476,19478,19480,19482,19484,19486,19489,19491,19493,19495,19497,19499, -19501,19503,19505,19507,19509,19511,19513,19515,19517,19519,19521,19523,19525, -19527,19529,19531,19533,19535,19537,19539,19541,19544,19546,19548,19550,19552, -19554,19556,19558,19560,19562,19564,19566,19568,19570,19572,19574,19576,19578, -19580,19582,19584,19586,19588,19590,19592,19594,19596,19598,19600,19602,19604, -19606,19608,19611,19613,19615,19617,19619,19621,19623,19625,19627,19629,19631, -19633,19635,19637,19639,19641,19643,19645,19647,19649,19651,19653,19655,19657, -19659,19661,19663,19665,19667,19669,19671,19673,19675,19677,19679,19681,19683, -19685,19687,19689,19691,19693,19695,19697,19699,19701,19703,19705,19707,19709, -19711,19714,19716,19718,19720,19722,19724,19726,19728,19730,19732,19734,19736, -19738,19740,19742,19744,19746,19748,19750,19752,19754,19756,19758,19760,19762, -19764,19766,19768,19770,19772,19774,19776,19778,19780,19782,19784,19786,19788, -19790,19792,19794,19796,19798,19800,19802,19804,19806,19808,19810,19812,19814, -19816,19818,19820,19822,19824,19826,19828,19830,19832,19834,19836,19838,19840, -19842,19844,19846,19848,19850,19852,19854,19856,19858,19860,19862,19864,19866, -19868,19870,19872,19874,19876,19878,19880,19882,19884,19886,19888,19890,19892, -19894,19896,19898,19900,19902,19904,19906,19908,19910,19912,19914,19916,19918, -19920,19922,19924,19926,19928,19930,19932,19934,19935,19937,19939,19941,19943, -19945,19947,19949,19951,19953,19955,19957,19959,19961,19963,19965,19967,19969, -19971,19973,19975,19977,19979,19981,19983,19985,19987,19989,19991,19993,19995, -19997,19999,20001,20003,20005,20007,20009,20011,20013,20015,20017,20019,20021, -20023,20025,20027,20029,20031,20033,20035,20037,20038,20040,20042,20044,20046, -20048,20050,20052,20054,20056,20058,20060,20062,20064,20066,20068,20070,20072, -20074,20076,20078,20080,20082,20084,20086,20088,20090,20092,20094,20096,20098, -20100,20102,20104,20105,20107,20109,20111,20113,20115,20117,20119,20121,20123, -20125,20127,20129,20131,20133,20135,20137,20139,20141,20143,20145,20147,20149, -20151,20153,20155,20157,20159,20160,20162,20164,20166,20168,20170,20172,20174, -20176,20178,20180,20182,20184,20186,20188,20190,20192,20194,20196,20198,20200, -20202,20204,20205,20207,20209,20211,20213,20215,20217,20219,20221,20223,20225, -20227,20229,20231,20233,20235,20237,20239,20241,20243,20245,20247,20248,20250, -20252,20254,20256,20258,20260,20262,20264,20266,20268,20270,20272,20274,20276, -20278,20280,20282,20284,20285,20287,20289,20291,20293,20295,20297,20299,20301, -20303,20305,20307,20309,20311,20313,20315,20317,20319,20320,20322,20324,20326, -20328,20330,20332,20334,20336,20338,20340,20342,20344,20346,20348,20350,20352, -20353,20355,20357,20359,20361,20363,20365,20367,20369,20371,20373,20375,20377, -20379,20381,20382,20384,20386,20388,20390,20392,20394,20396,20398,20400,20402, -20404,20406,20408,20410,20411,20413,20415,20417,20419,20421,20423,20425,20427, -20429,20431,20433,20435,20437,20439,20440,20442,20444,20446,20448,20450,20452, -20454,20456,20458,20460,20462,20464,20466,20467,20469,20471,20473,20475,20477, -20479,20481,20483,20485,20487,20489,20491,20492,20494,20496,20498,20500,20502, -20504,20506,20508,20510,20512,20514,20515,20517,20519,20521,20523,20525,20527, -20529,20531,20533,20535,20537,20539,20540,20542,20544,20546,20548,20550,20552, -20554,20556,20558,20560,20562,20563,20565,20567,20569,20571,20573,20575,20577, -20579,20581,20583,20584,20586,20588,20590,20592,20594,20596,20598,20600,20602, -20604,20606,20607,20609,20611,20613,20615,20617,20619,20621,20623,20625,20627, -20628,20630,20632,20634,20636,20638,20640,20642,20644,20646,20647,20649,20651, -20653,20655,20657,20659,20661,20663,20665,20667,20668,20670,20672,20674,20676, -20678,20680,20682,20684,20686,20687,20689,20691,20693,20695,20697,20699,20701, -20703,20705,20706,20708,20710,20712,20714,20716,20718,20720,20722,20724,20725, -20727,20729,20731,20733,20735,20737,20739,20741,20742,20744,20746,20748,20750, -20752,20754,20756,20758,20760,20761,20763,20765,20767,20769,20771,20773,20775, -20777,20778,20780,20782,20784,20786,20788,20790,20792,20794,20795,20797,20799, -20801,20803,20805,20807,20809,20811,20812,20814,20816,20818,20820,20822,20824, -20826,20828,20829,20831,20833,20835,20837,20839,20841,20843,20845,20846,20848, -20850,20852,20854,20856,20858,20860,20861,20863,20865,20867,20869,20871,20873, -20875,20877,20878,20880,20882,20884,20886,20888,20890,20892,20893,20895,20897, -20899,20901,20903,20905,20907,20908,20910,20912,20914,20916,20918,20920,20922, -20923,20925,20927,20929,20931,20933,20935,20937,20938,20940,20942,20944,20946, -20948,20950,20952,20953,20955,20957,20959,20961,20963,20965,20967,20968,20970, -20972,20974,20976,20978,20980,20982,20983,20985,20987,20989,20991,20993,20995, -20996,20998,21000,21002,21004,21006,21008,21010,21011,21013,21015,21017,21019, -21021,21023,21024,21026,21028,21030,21032,21034,21036,21038,21039,21041,21043, -21045,21047,21049,21051,21052,21054,21056,21058,21060,21062,21064,21065,21067, -21069,21071,21073,21075,21077,21078,21080,21082,21084,21086,21088,21090,21091, -21093,21095,21097,21099,21101,21103,21104,21106,21108,21110,21112,21114,21116, -21117,21119,21121,21123,21125,21127,21129,21130,21132,21134,21136,21138,21140, -21142,21143,21145,21147,21149,21151,21153,21155,21156,21158,21160,21162,21164, -21166,21167,21169,21171,21173,21175,21177,21179,21180,21182,21184,21186,21188, -21190,21192,21193,21195,21197,21199,21201,21203,21204,21206,21208,21210,21212, -21214,21216,21217,21219,21221,21223,21225,21227,21228,21230,21232,21234,21236, -21238,21239,21241,21243,21245,21247,21249,21251,21252,21254,21256,21258,21260, -21262,21263,21265,21267,21269,21271,21273,21274,21276,21278,21280,21282,21284, -21285,21287,21289,21291,21293,21295,21296,21298,21300,21302,21304,21306,21308, -21309,21311,21313,21315,21317,21319,21320,21322,21324,21326,21328,21330,21331, -21333,21335,21337,21339,21341,21342,21344,21346,21348,21350,21351,21353,21355, -21357,21359,21361,21362,21364,21366,21368,21370,21372,21373,21375,21377,21379, -21381,21383,21384,21386,21388,21390,21392,21394,21395,21397,21399,21401,21403, -21405,21406,21408,21410,21412,21414,21415,21417,21419,21421,21423,21425,21426, -21428,21430,21432,21434,21436,21437,21439,21441,21443,21445,21446,21448,21450, -21452,21454,21456,21457,21459,21461,21463,21465,21466,21468,21470,21472,21474, -21476,21477,21479,21481,21483,21485,21486,21488,21490,21492,21494,21496,21497, -21499,21501,21503,21505,21506,21508,21510,21512,21514,21516,21517,21519,21521, -21523,21525,21526,21528,21530,21532,21534,21535,21537,21539,21541,21543,21545, -21546,21548,21550,21552,21554,21555,21557,21559,21561,21563,21564,21566,21568, -21570,21572,21573,21575,21577,21579,21581,21582,21584,21586,21588,21590,21592, -21593,21595,21597,21599,21601,21602,21604,21606,21608,21610,21611,21613,21615, -21617,21619,21620,21622,21624,21626,21628,21629,21631,21633,21635,21637,21638, -21640,21642,21644,21646,21647,21649,21651,21653,21655,21656,21658,21660,21662, -21664,21665,21667,21669,21671,21673,21674,21676,21678,21680,21682,21683,21685, -21687,21689,21691,21692,21694,21696,21698,21700,21701,21703,21705,21707,21709, -21710,21712,21714,21716,21718,21719,21721,21723,21725,21726,21728,21730,21732, -21734,21735,21737,21739,21741,21743,21744,21746,21748,21750,21752,21753,21755, -21757,21759,21761,21762,21764,21766,21768,21769,21771,21773,21775,21777,21778, -21780,21782,21784,21786,21787,21789,21791,21793,21794,21796,21798,21800,21802, -21803,21805,21807,21809,21811,21812,21814,21816,21818,21819,21821,21823,21825, -21827,21828,21830,21832,21834,21836,21837,21839,21841,21843,21844,21846,21848, -21850,21852,21853,21855,21857,21859,21860,21862,21864,21866,21868,21869,21871, -21873,21875,21876,21878,21880,21882,21884,21885,21887,21889,21891,21892,21894, -21896,21898,21900,21901,21903,21905,21907,21908,21910,21912,21914,21916,21917, -21919,21921,21923,21924,21926,21928,21930,21932,21933,21935,21937,21939,21940, -21942,21944,21946,21947,21949,21951,21953,21955,21956,21958,21960,21962,21963, -21965,21967,21969,21970,21972,21974,21976,21978,21979,21981,21983,21985,21986, -21988,21990,21992,21993,21995,21997,21999,22001,22002,22004,22006,22008,22009, -22011,22013,22015,22016,22018,22020,22022,22023,22025,22027,22029,22031,22032, -22034,22036,22038,22039,22041,22043,22045,22046,22048,22050,22052,22053,22055, -22057,22059,22060,22062,22064,22066,22068,22069,22071,22073,22075,22076,22078, -22080,22082,22083,22085,22087,22089,22090,22092,22094,22096,22097,22099,22101, -22103,22104,22106,22108,22110,22111,22113,22115,22117,22118,22120,22122,22124, -22125,22127,22129,22131,22132,22134,22136,22138,22140,22141,22143,22145,22147, -22148,22150,22152,22154,22155,22157,22159,22161,22162,22164,22166,22168,22169, -22171,22173,22175,22176,22178,22180,22182,22183,22185,22187,22189,22190,22192, -22194,22196,22197,22199,22201,22203,22204,22206,22208,22209,22211,22213,22215, -22216,22218,22220,22222,22223,22225,22227,22229,22230,22232,22234,22236,22237, -22239,22241,22243,22244,22246,22248,22250,22251,22253,22255,22257,22258,22260, -22262,22264,22265,22267,22269,22270,22272,22274,22276,22277,22279,22281,22283, -22284,22286,22288,22290,22291,22293,22295,22297,22298,22300,22302,22304,22305, -22307,22309,22310,22312,22314,22316,22317,22319,22321,22323,22324,22326,22328, -22330,22331,22333,22335,22337,22338,22340,22342,22343,22345,22347,22349,22350, -22352,22354,22356,22357,22359,22361,22363,22364,22366,22368,22369,22371,22373, -22375,22376,22378,22380,22382,22383,22385,22387,22388,22390,22392,22394,22395, -22397,22399,22401,22402,22404,22406,22407,22409,22411,22413,22414,22416,22418, -22420,22421,22423,22425,22426,22428,22430,22432,22433,22435,22437,22439,22440, -22442,22444,22445,22447,22449,22451,22452,22454,22456,22458,22459,22461,22463, -22464,22466,22468,22470,22471,22473,22475,22476,22478,22480,22482,22483,22485, -22487,22488,22490,22492,22494,22495,22497,22499,22501,22502,22504,22506,22507, -22509,22511,22513,22514,22516,22518,22519,22521,22523,22525,22526,22528,22530, -22531,22533,22535,22537,22538,22540,22542,22543,22545,22547,22549,22550,22552, -22554,22555,22557,22559,22561,22562,22564,22566,22567,22569,22571,22573,22574, -22576,22578,22579,22581,22583,22585,22586,22588,22590,22591,22593,22595,22597, -22598,22600,22602,22603,22605,22607,22609,22610,22612,22614,22615,22617,22619, -22620,22622,22624,22626,22627,22629,22631,22632,22634,22636,22638,22639,22641, -22643,22644,22646,22648,22649,22651,22653,22655,22656,22658,22660,22661,22663, -22665,22667,22668,22670,22672,22673,22675,22677,22678,22680,22682,22684,22685, -22687,22689,22690,22692,22694,22695,22697,22699,22701,22702,22704,22706,22707, -22709,22711,22712,22714,22716,22718,22719,22721,22723,22724,22726,22728,22729, -22731,22733,22735,22736,22738,22740,22741,22743,22745,22746,22748,22750,22752, -22753,22755,22757,22758,22760,22762,22763,22765,22767,22768,22770,22772,22774, -22775,22777,22779,22780,22782,22784,22785,22787,22789,22790,22792,22794,22796, -22797,22799,22801,22802,22804,22806,22807,22809,22811,22812,22814,22816,22818, -22819,22821,22823,22824,22826,22828,22829,22831,22833,22834,22836,22838,22840, -22841,22843,22845,22846,22848,22850,22851,22853,22855,22856,22858,22860,22861, -22863,22865,22866,22868,22870,22872,22873,22875,22877,22878,22880,22882,22883, -22885,22887,22888,22890,22892,22893,22895,22897,22898,22900,22902,22904,22905, -22907,22909,22910,22912,22914,22915,22917,22919,22920,22922,22924,22925,22927, -22929,22930,22932,22934,22935,22937,22939,22941,22942,22944,22946,22947,22949, -22951,22952,22954,22956,22957,22959,22961,22962,22964,22966,22967,22969,22971, -22972,22974,22976,22977,22979,22981,22982,22984,22986,22987,22989,22991,22992, -22994,22996,22998,22999,23001,23003,23004,23006,23008,23009,23011,23013,23014, -23016,23018,23019,23021,23023,23024,23026,23028,23029,23031,23033,23034,23036, -23038,23039,23041,23043,23044,23046,23048,23049,23051,23053,23054,23056,23058, -23059,23061,23063,23064,23066,23068,23069,23071,23073,23074,23076,23078,23079, -23081,23083,23084,23086,23088,23089,23091,23093,23094,23096,23098,23099,23101, -23103,23104,23106,23108,23109,23111,23113,23114,23116,23118,23119,23121,23123, -23124,23126,23128,23129,23131,23133,23134,23136,23138,23139,23141,23143,23144, -23146,23148,23149,23151,23153,23154,23156,23158,23159,23161,23163,23164,23166, -23168,23169,23171,23172,23174,23176,23177,23179,23181,23182,23184,23186,23187, -23189,23191,23192,23194,23196,23197,23199,23201,23202,23204,23206,23207,23209, -23211,23212,23214,23216,23217,23219,23221,23222,23224,23226,23227,23229,23230, -23232,23234,23235,23237,23239,23240,23242,23244,23245,23247,23249,23250,23252, -23254,23255,23257,23259,23260,23262,23264,23265,23267,23268,23270,23272,23273, -23275,23277,23278,23280,23282,23283,23285,23287,23288,23290,23292,23293,23295, -23297,23298,23300,23301,23303,23305,23306,23308,23310,23311,23313,23315,23316, -23318,23320,23321,23323,23324,23326,23328,23329,23331,23333,23334,23336,23338, -23339,23341,23343,23344,23346,23348,23349,23351,23352,23354,23356,23357,23359, -23361,23362,23364,23366,23367,23369,23371,23372,23374,23375,23377,23379,23380, -23382,23384,23385,23387,23389,23390,23392,23393,23395,23397,23398,23400,23402, -23403,23405,23407,23408,23410,23412,23413,23415,23416,23418,23420,23421,23423, -23425,23426,23428,23430,23431,23433,23434,23436,23438,23439,23441,23443,23444, -23446,23448,23449,23451,23452,23454,23456,23457,23459,23461,23462,23464,23466, -23467,23469,23470,23472,23474,23475,23477,23479,23480,23482,23483,23485,23487, -23488,23490,23492,23493,23495,23497,23498,23500,23501,23503,23505,23506,23508, -23510,23511,23513,23514,23516,23518,23519,23521,23523,23524,23526,23527,23529, -23531,23532,23534,23536,23537,23539,23541,23542,23544,23545,23547,23549,23550, -23552,23554,23555,23557,23558,23560,23562,23563,23565,23567,23568,23570,23571, -23573,23575,23576,23578,23580,23581,23583,23584,23586,23588,23589,23591,23593, -23594,23596,23597,23599,23601,23602,23604,23606,23607,23609,23610,23612,23614, -23615,23617,23618,23620,23622,23623,23625,23627,23628,23630,23631,23633,23635, -23636,23638,23640,23641,23643,23644,23646,23648,23649,23651,23652,23654,23656, -23657,23659,23661,23662,23664,23665,23667,23669,23670,23672,23674,23675,23677, -23678,23680,23682,23683,23685,23686,23688,23690,23691,23693,23695,23696,23698, -23699,23701,23703,23704,23706,23707,23709,23711,23712,23714,23715,23717,23719, -23720,23722,23724,23725,23727,23728,23730,23732,23733,23735,23736,23738,23740, -23741,23743,23744,23746,23748,23749,23751,23753,23754,23756,23757,23759,23761, -23762,23764,23765,23767,23769,23770,23772,23773,23775,23777,23778,23780,23781, -23783,23785,23786,23788,23790,23791,23793,23794,23796,23798,23799,23801,23802, -23804,23806,23807,23809,23810,23812,23814,23815,23817,23818,23820,23822,23823, -23825,23826,23828,23830,23831,23833,23834,23836,23838,23839,23841,23842,23844, -23846,23847,23849,23850,23852,23854,23855,23857,23858,23860,23862,23863,23865, -23867,23868,23870,23871,23873,23875,23876,23878,23879,23881,23882,23884,23886, -23887,23889,23890,23892,23894,23895,23897,23898,23900,23902,23903,23905,23906, -23908,23910,23911,23913,23914,23916,23918,23919,23921,23922,23924,23926,23927, -23929,23930,23932,23934,23935,23937,23938,23940,23942,23943,23945,23946,23948, -23950,23951,23953,23954,23956,23958,23959,23961,23962,23964,23965,23967,23969, -23970,23972,23973,23975,23977,23978,23980,23981,23983,23985,23986,23988,23989, -23991,23993,23994,23996,23997,23999,24000,24002,24004,24005,24007,24008,24010, -24012,24013,24015,24016,24018,24020,24021,24023,24024,24026,24027,24029,24031, -24032,24034,24035,24037,24039,24040,24042,24043,24045,24047,24048,24050,24051, -24053,24054,24056,24058,24059,24061,24062,24064,24066,24067,24069,24070,24072, -24073,24075,24077,24078,24080,24081,24083,24085,24086,24088,24089,24091,24092, -24094,24096,24097,24099,24100,24102,24104,24105,24107,24108,24110,24111,24113, -24115,24116,24118,24119,24121,24122,24124,24126,24127,24129,24130,24132,24134, -24135,24137,24138,24140,24141,24143,24145,24146,24148,24149,24151,24152,24154, -24156,24157,24159,24160,24162,24164,24165,24167,24168,24170,24171,24173,24175, -24176,24178,24179,24181,24182,24184,24186,24187,24189,24190,24192,24193,24195, -24197,24198,24200,24201,24203,24204,24206,24208,24209,24211,24212,24214,24215, -24217,24219,24220,24222,24223,24225,24226,24228,24230,24231,24233,24234,24236, -24237,24239,24241,24242,24244,24245,24247,24248,24250,24252,24253,24255,24256, -24258,24259,24261,24263,24264,24266,24267,24269,24270,24272,24274,24275,24277, -24278,24280,24281,24283,24285,24286,24288,24289,24291,24292,24294,24296,24297, -24299,24300,24302,24303,24305,24306,24308,24310,24311,24313,24314,24316,24317, -24319,24321,24322,24324,24325,24327,24328,24330,24332,24333,24335,24336,24338, -24339,24341,24342,24344,24346,24347,24349,24350,24352,24353,24355,24356,24358, -24360,24361,24363,24364,24366,24367,24369,24371,24372,24374,24375,24377,24378, -24380,24381,24383,24385,24386,24388,24389,24391,24392,24394,24395,24397,24399, -24400,24402,24403,24405,24406,24408,24410,24411,24413,24414,24416,24417,24419, -24420,24422,24424,24425,24427,24428,24430,24431,24433,24434,24436,24438,24439, -24441,24442,24444,24445,24447,24448,24450,24452,24453,24455,24456,24458,24459, -24461,24462,24464,24465,24467,24469,24470,24472,24473,24475,24476,24478,24479, -24481,24483,24484,24486,24487,24489,24490,24492,24493,24495,24497,24498,24500, -24501,24503,24504,24506,24507,24509,24510,24512,24514,24515,24517,24518,24520, -24521,24523,24524,24526,24528,24529,24531,24532,24534,24535,24537,24538,24540, -24541,24543,24545,24546,24548,24549,24551,24552,24554,24555,24557,24558,24560, -24562,24563,24565,24566,24568,24569,24571,24572,24574,24575,24577,24579,24580, -24582,24583,24585,24586,24588,24589,24591,24592,24594,24596,24597,24599,24600, -24602,24603,24605,24606,24608,24609,24611,24612,24614,24616,24617,24619,24620, -24622,24623,24625,24626,24628,24629,24631,24633,24634,24636,24637,24639,24640, -24642,24643,24645,24646,24648,24649,24651,24653,24654,24656,24657,24659,24660, -24662,24663,24665,24666,24668,24669,24671,24673,24674,24676,24677,24679,24680, -24682,24683,24685,24686,24688,24689,24691,24692,24694,24696,24697,24699,24700, -24702,24703,24705,24706,24708,24709,24711,24712,24714,24715,24717,24719,24720, -24722,24723,24725,24726,24728,24729,24731,24732,24734,24735,24737,24738,24740, -24742,24743,24745,24746,24748,24749,24751,24752,24754,24755,24757,24758,24760, -24761,24763,24765,24766,24768,24769,24771,24772,24774,24775,24777,24778,24780, -24781,24783,24784,24786,24787,24789,24791,24792,24794,24795,24797,24798,24800, -24801,24803,24804,24806,24807,24809,24810,24812,24813,24815,24816,24818,24820, -24821,24823,24824,24826,24827,24829,24830,24832,24833,24835,24836,24838,24839, -24841,24842,24844,24845,24847,24848,24850,24852,24853,24855,24856,24858,24859, -24861,24862,24864,24865,24867,24868,24870,24871,24873,24874,24876,24877,24879, -24880,24882,24883,24885,24887,24888,24890,24891,24893,24894,24896,24897,24899, -24900,24902,24903,24905,24906,24908,24909,24911,24912,24914,24915,24917,24918, -24920,24921,24923,24925,24926,24928,24929,24931,24932,24934,24935,24937,24938, -24940,24941,24943,24944,24946,24947,24949,24950,24952,24953,24955,24956,24958, -24959,24961,24962,24964,24965,24967,24968,24970,24972,24973,24975,24976,24978, -24979,24981,24982,24984,24985,24987,24988,24990,24991,24993,24994,24996,24997, -24999,25000,25002,25003,25005,25006,25008,25009,25011,25012,25014,25015,25017, -25018,25020,25021,25023,25024,25026,25027,25029,25031,25032,25034,25035,25037, -25038,25040,25041,25043,25044,25046,25047,25049,25050,25052,25053,25055,25056, -25058,25059,25061,25062,25064,25065,25067,25068,25070,25071,25073,25074,25076, -25077,25079,25080,25082,25083,25085,25086,25088,25089,25091,25092,25094,25095, -25097,25098,25100,25101,25103,25104,25106,25107,25109,25110,25112,25113,25115, -25116,25118,25119,25121,25122,25124,25125,25127,25128,25130,25131,25133,25134, -25136,25137,25139,25140,25142,25143,25145,25146,25148,25149,25151,25152,25154, -25155,25157,25158,25160,25161,25163,25164,25166,25167,25169,25170,25172,25173, -25175,25176,25178,25179,25181,25182,25184,25185,25187,25188,25190,25191,25193, -25194,25196,25197,25199,25200,25202,25203,25205,25206,25208,25209,25211,25212, -25214,25215,25217,25218,25220,25221,25223,25224,25226,25227,25229,25230,25232, -25233,25235,25236,25238,25239,25241,25242,25244,25245,25247,25248,25250,25251, -25253,25254,25256,25257,25259,25260,25262,25263,25265,25266,25268,25269,25271, -25272,25274,25275,25277,25278,25280,25281,25283,25284,25286,25287,25289,25290, -25292,25293,25295,25296,25298,25299,25301,25302,25304,25305,25306,25308,25309, -25311,25312,25314,25315,25317,25318,25320,25321,25323,25324,25326,25327,25329, -25330,25332,25333,25335,25336,25338,25339,25341,25342,25344,25345,25347,25348, -25350,25351,25353,25354,25356,25357,25359,25360,25362,25363,25365,25366,25367, -25369,25370,25372,25373,25375,25376,25378,25379,25381,25382,25384,25385,25387, -25388,25390,25391,25393,25394,25396,25397,25399,25400,25402,25403,25405,25406, -25408,25409,25411,25412,25413,25415,25416,25418,25419,25421,25422,25424,25425, -25427,25428,25430,25431,25433,25434,25436,25437,25439,25440,25442,25443,25445, -25446,25448,25449,25451,25452,25453,25455,25456,25458,25459,25461,25462,25464, -25465,25467,25468,25470,25471,25473,25474,25476,25477,25479,25480,25482,25483, -25485,25486,25487,25489,25490,25492,25493,25495,25496,25498,25499,25501,25502, -25504,25505,25507,25508,25510,25511,25513,25514,25516,25517,25518,25520,25521, -25523,25524,25526,25527,25529,25530,25532,25533,25535,25536,25538,25539,25541, -25542,25544,25545,25546,25548,25549,25551,25552,25554,25555,25557,25558,25560, -25561,25563,25564,25566,25567,25569,25570,25571,25573,25574,25576,25577,25579, -25580,25582,25583,25585,25586,25588,25589,25591,25592,25594,25595,25596,25598, -25599,25601,25602,25604,25605,25607,25608,25610,25611,25613,25614,25616,25617, -25619,25620,25621,25623,25624,25626,25627,25629,25630,25632,25633,25635,25636, -25638,25639,25641,25642,25643,25645,25646,25648,25649,25651,25652,25654,25655, -25657,25658,25660,25661,25662,25664,25665,25667,25668,25670,25671,25673,25674, -25676,25677,25679,25680,25682,25683,25684,25686,25687,25689,25690,25692,25693, -25695,25696,25698,25699,25701,25702,25703,25705,25706,25708,25709,25711,25712, -25714,25715,25717,25718,25720,25721,25722,25724,25725,25727,25728,25730,25731, -25733,25734,25736,25737,25739,25740,25741,25743,25744,25746,25747,25749,25750, -25752,25753,25755,25756,25757,25759,25760,25762,25763,25765,25766,25768,25769, -25771,25772,25774,25775,25776,25778,25779,25781,25782,25784,25785,25787,25788, -25790,25791,25792,25794,25795,25797,25798,25800,25801,25803,25804,25806,25807, -25808,25810,25811,25813,25814,25816,25817,25819,25820,25822,25823,25824,25826, -25827,25829,25830,25832,25833,25835,25836,25838,25839,25840,25842,25843,25845, -25846,25848,25849,25851,25852,25853,25855,25856,25858,25859,25861,25862,25864, -25865,25867,25868,25869,25871,25872,25874,25875,25877,25878,25880,25881,25882, -25884,25885,25887,25888,25890,25891,25893,25894,25896,25897,25898,25900,25901, -25903,25904,25906,25907,25909,25910,25911,25913,25914,25916,25917,25919,25920, -25922,25923,25924,25926,25927,25929,25930,25932,25933,25935,25936,25937,25939, -25940,25942,25943,25945,25946,25948,25949,25951,25952,25953,25955,25956,25958, -25959,25961,25962,25963,25965,25966,25968,25969,25971,25972,25974,25975,25976, -25978,25979,25981,25982,25984,25985,25987,25988,25989,25991,25992,25994,25995, -25997,25998,26000,26001,26002,26004,26005,26007,26008,26010,26011,26013,26014, -26015,26017,26018,26020,26021,26023,26024,26025,26027,26028,26030,26031,26033, -26034,26036,26037,26038,26040,26041,26043,26044,26046,26047,26049,26050,26051, -26053,26054,26056,26057,26059,26060,26061,26063,26064,26066,26067,26069,26070, -26072,26073,26074,26076,26077,26079,26080,26082,26083,26084,26086,26087,26089, -26090,26092,26093,26094,26096,26097,26099,26100,26102,26103,26105,26106,26107, -26109,26110,26112,26113,26115,26116,26117,26119,26120,26122,26123,26125,26126, -26127,26129,26130,26132,26133,26135,26136,26137,26139,26140,26142,26143,26145, -26146,26148,26149,26150,26152,26153,26155,26156,26158,26159,26160,26162,26163, -26165,26166,26168,26169,26170,26172,26173,26175,26176,26178,26179,26180,26182, -26183,26185,26186,26188,26189,26190,26192,26193,26195,26196,26198,26199,26200, -26202,26203,26205,26206,26208,26209,26210,26212,26213,26215,26216,26218,26219, -26220,26222,26223,26225,26226,26228,26229,26230,26232,26233,26235,26236,26237, -26239,26240,26242,26243,26245,26246,26247,26249,26250,26252,26253,26255,26256, -26257,26259,26260,26262,26263,26265,26266,26267,26269,26270,26272,26273,26275, -26276,26277,26279,26280,26282,26283,26284,26286,26287,26289,26290,26292,26293, -26294,26296,26297,26299,26300,26302,26303,26304,26306,26307,26309,26310,26311, -26313,26314,26316,26317,26319,26320,26321,26323,26324,26326,26327,26329,26330, -26331,26333,26334,26336,26337,26338,26340,26341,26343,26344,26346,26347,26348, -26350,26351,26353,26354,26355,26357,26358,26360,26361,26363,26364,26365,26367, -26368,26370,26371,26372,26374,26375,26377,26378,26380,26381,26382,26384,26385, -26387,26388,26389,26391,26392,26394,26395,26397,26398,26399,26401,26402,26404, -26405,26406,26408,26409,26411,26412,26413,26415,26416,26418,26419,26421,26422, -26423,26425,26426,26428,26429,26430,26432,26433,26435,26436,26438,26439,26440, -26442,26443,26445,26446,26447,26449,26450,26452,26453,26454,26456,26457,26459, -26460,26462,26463,26464,26466,26467,26469,26470,26471,26473,26474,26476,26477, -26478,26480,26481,26483,26484,26485,26487,26488,26490,26491,26493,26494,26495, -26497,26498,26500,26501,26502,26504,26505,26507,26508,26509,26511,26512,26514, -26515,26516,26518,26519,26521,26522,26523,26525,26526,26528,26529,26531,26532, -26533,26535,26536,26538,26539,26540,26542,26543,26545,26546,26547,26549,26550, -26552,26553,26554,26556,26557,26559,26560,26561,26563,26564,26566,26567,26568, -26570,26571,26573,26574,26575,26577,26578,26580,26581,26582,26584,26585,26587, -26588,26589,26591,26592,26594,26595,26596,26598,26599,26601,26602,26603,26605, -26606,26608,26609,26610,26612,26613,26615,26616,26617,26619,26620,26622,26623, -26624,26626,26627,26629,26630,26631,26633,26634,26636,26637,26638,26640,26641, -26643,26644,26645,26647,26648,26650,26651,26652,26654,26655,26657,26658,26659, -26661,26662,26664,26665,26666,26668,26669,26671,26672,26673,26675,26676,26678, -26679,26680,26682,26683,26685,26686,26687,26689,26690,26692,26693,26694,26696, -26697,26699,26700,26701,26703,26704,26706,26707,26708,26710,26711,26713,26714, -26715,26717,26718,26719,26721,26722,26724,26725,26726,26728,26729,26731,26732, -26733,26735,26736,26738,26739,26740,26742,26743,26745,26746,26747,26749,26750, -26752,26753,26754,26756,26757,26758,26760,26761,26763,26764,26765,26767,26768, -26770,26771,26772,26774,26775,26777,26778,26779,26781,26782,26783,26785,26786, -26788,26789,26790,26792,26793,26795,26796,26797,26799,26800,26802,26803,26804, -26806,26807,26808,26810,26811,26813,26814,26815,26817,26818,26820,26821,26822, -26824,26825,26827,26828,26829,26831,26832,26833,26835,26836,26838,26839,26840, -26842,26843,26845,26846,26847,26849,26850,26851,26853,26854,26856,26857,26858, -26860,26861,26863,26864,26865,26867,26868,26869,26871,26872,26874,26875,26876, -26878,26879,26881,26882,26883,26885,26886,26887,26889,26890,26892,26893,26894, -26896,26897,26899,26900,26901,26903,26904,26905,26907,26908,26910,26911,26912, -26914,26915,26916,26918,26919,26921,26922,26923,26925,26926,26928,26929,26930, -26932,26933,26934,26936,26937,26939,26940,26941,26943,26944,26945,26947,26948, -26950,26951,26952,26954,26955,26956,26958,26959,26961,26962,26963,26965,26966, -26968,26969,26970,26972,26973,26974,26976,26977,26979,26980,26981,26983,26984, -26985,26987,26988,26990,26991,26992,26994,26995,26996,26998,26999,27001,27002, -27003,27005,27006,27007,27009,27010,27012,27013,27014,27016,27017,27018,27020, -27021,27023,27024,27025,27027,27028,27029,27031,27032,27034,27035,27036,27038, -27039,27040,27042,27043,27045,27046,27047,27049,27050,27051,27053,27054,27056, -27057,27058,27060,27061,27062,27064,27065,27067,27068,27069,27071,27072,27073, -27075,27076,27077,27079,27080,27082,27083,27084,27086,27087,27088,27090,27091, -27093,27094,27095,27097,27098,27099,27101,27102,27104,27105,27106,27108,27109, -27110,27112,27113,27114,27116,27117,27119,27120,27121,27123,27124,27125,27127, -27128,27130,27131,27132,27134,27135,27136,27138,27139,27140,27142,27143,27145, -27146,27147,27149,27150,27151,27153,27154,27155,27157,27158,27160,27161,27162, -27164,27165,27166,27168,27169,27171,27172,27173,27175,27176,27177,27179,27180, -27181,27183,27184,27186,27187,27188,27190,27191,27192,27194,27195,27196,27198, -27199,27201,27202,27203,27205,27206,27207,27209,27210,27211,27213,27214,27216, -27217,27218,27220,27221,27222,27224,27225,27226,27228,27229,27230,27232,27233, -27235,27236,27237,27239,27240,27241,27243,27244,27245,27247,27248,27250,27251, -27252,27254,27255,27256,27258,27259,27260,27262,27263,27264,27266,27267,27269, -27270,27271,27273,27274,27275,27277,27278,27279,27281,27282,27284,27285,27286, -27288,27289,27290,27292,27293,27294,27296,27297,27298,27300,27301,27303,27304, -27305,27307,27308,27309,27311,27312,27313,27315,27316,27317,27319,27320,27322, -27323,27324,27326,27327,27328,27330,27331,27332,27334,27335,27336,27338,27339, -27340,27342,27343,27345,27346,27347,27349,27350,27351,27353,27354,27355,27357, -27358,27359,27361,27362,27364,27365,27366,27368,27369,27370,27372,27373,27374, -27376,27377,27378,27380,27381,27382,27384,27385,27387,27388,27389,27391,27392, -27393,27395,27396,27397,27399,27400,27401,27403,27404,27405,27407,27408,27409, -27411,27412,27414,27415,27416,27418,27419,27420,27422,27423,27424,27426,27427, -27428,27430,27431,27432,27434,27435,27436,27438,27439,27441,27442,27443,27445, -27446,27447,27449,27450,27451,27453,27454,27455,27457,27458,27459,27461,27462, -27463,27465,27466,27467,27469,27470,27472,27473,27474,27476,27477,27478,27480, -27481,27482,27484,27485,27486,27488,27489,27490,27492,27493,27494,27496,27497, -27498,27500,27501,27502,27504,27505,27506,27508,27509,27511,27512,27513,27515, -27516,27517,27519,27520,27521,27523,27524,27525,27527,27528,27529,27531,27532, -27533,27535,27536,27537,27539,27540,27541,27543,27544,27545,27547,27548,27549, -27551,27552,27554,27555,27556,27558,27559,27560,27562,27563,27564,27566,27567, -27568,27570,27571,27572,27574,27575,27576,27578,27579,27580,27582,27583,27584, -27586,27587,27588,27590,27591,27592,27594,27595,27596,27598,27599,27600,27602, -27603,27604,27606,27607,27608,27610,27611,27612,27614,27615,27616,27618,27619, -27620,27622,27623,27624,27626,27627,27629,27630,27631,27633,27634,27635,27637, -27638,27639,27641,27642,27643,27645,27646,27647,27649,27650,27651,27653,27654, -27655,27657,27658,27659,27661,27662,27663,27665,27666,27667,27669,27670,27671, -27673,27674,27675,27677,27678,27679,27681,27682,27683,27685,27686,27687,27689, -27690,27691,27693,27694,27695,27697,27698,27699,27701,27702,27703,27705,27706, -27707,27709,27710,27711,27713,27714,27715,27717,27718,27719,27721,27722,27723, -27725,27726,27727,27729,27730,27731,27733,27734,27735,27737,27738,27739,27741, -27742,27743,27745,27746,27747,27749,27750,27751,27753,27754,27755,27757,27758, -27759,27761,27762,27763,27764,27766,27767,27768,27770,27771,27772,27774,27775, -27776,27778,27779,27780,27782,27783,27784,27786,27787,27788,27790,27791,27792, -27794,27795,27796,27798,27799,27800,27802,27803,27804,27806,27807,27808,27810, -27811,27812,27814,27815,27816,27818,27819,27820,27822,27823,27824,27826,27827, -27828,27830,27831,27832,27833,27835,27836,27837,27839,27840,27841,27843,27844, -27845,27847,27848,27849,27851,27852,27853,27855,27856,27857,27859,27860,27861, -27863,27864,27865,27867,27868,27869,27871,27872,27873,27875,27876,27877,27879, -27880,27881,27882,27884,27885,27886,27888,27889,27890,27892,27893,27894,27896, -27897,27898,27900,27901,27902,27904,27905,27906,27908,27909,27910,27912,27913, -27914,27915,27917,27918,27919,27921,27922,27923,27925,27926,27927,27929,27930, -27931,27933,27934,27935,27937,27938,27939,27941,27942,27943,27945,27946,27947, -27948,27950,27951,27952,27954,27955,27956,27958,27959,27960,27962,27963,27964, -27966,27967,27968,27970,27971,27972,27974,27975,27976,27977,27979,27980,27981, -27983,27984,27985,27987,27988,27989,27991,27992,27993,27995,27996,27997,27999, -28000,28001,28002,28004,28005,28006,28008,28009,28010,28012,28013,28014,28016, -28017,28018,28020,28021,28022,28023,28025,28026,28027,28029,28030,28031,28033, -28034,28035,28037,28038,28039,28041,28042,28043,28045,28046,28047,28048,28050, -28051,28052,28054,28055,28056,28058,28059,28060,28062,28063,28064,28066,28067, -28068,28069,28071,28072,28073,28075,28076,28077,28079,28080,28081,28083,28084, -28085,28086,28088,28089,28090,28092,28093,28094,28096,28097,28098,28100,28101, -28102,28104,28105,28106,28107,28109,28110,28111,28113,28114,28115,28117,28118, -28119,28121,28122,28123,28124,28126,28127,28128,28130,28131,28132,28134,28135, -28136,28138,28139,28140,28141,28143,28144,28145,28147,28148,28149,28151,28152, -28153,28155,28156,28157,28158,28160,28161,28162,28164,28165,28166,28168,28169, -28170,28171,28173,28174,28175,28177,28178,28179,28181,28182,28183,28185,28186, -28187,28188,28190,28191,28192,28194,28195,28196,28198,28199,28200,28201,28203, -28204,28205,28207,28208,28209,28211,28212,28213,28215,28216,28217,28218,28220, -28221,28222,28224,28225,28226,28228,28229,28230,28231,28233,28234,28235,28237, -28238,28239,28241,28242,28243,28244,28246,28247,28248,28250,28251,28252,28254, -28255,28256,28257,28259,28260,28261,28263,28264,28265,28267,28268,28269,28270, -28272,28273,28274,28276,28277,28278,28280,28281,28282,28283,28285,28286,28287, -28289,28290,28291,28293,28294,28295,28296,28298,28299,28300,28302,28303,28304, -28306,28307,28308,28309,28311,28312,28313,28315,28316,28317,28319,28320,28321, -28322,28324,28325,28326,28328,28329,28330,28331,28333,28334,28335,28337,28338, -28339,28341,28342,28343,28344,28346,28347,28348,28350,28351,28352,28353,28355, -28356,28357,28359,28360,28361,28363,28364,28365,28366,28368,28369,28370,28372, -28373,28374,28375,28377,28378,28379,28381,28382,28383,28385,28386,28387,28388, -28390,28391,28392,28394,28395,28396,28397,28399,28400,28401,28403,28404,28405, -28407,28408,28409,28410,28412,28413,28414,28416,28417,28418,28419,28421,28422, -28423,28425,28426,28427,28428,28430,28431,28432,28434,28435,28436,28438,28439, -28440,28441,28443,28444,28445,28447,28448,28449,28450,28452,28453,28454,28456, -28457,28458,28459,28461,28462,28463,28465,28466,28467,28468,28470,28471,28472, -28474,28475,28476,28477,28479,28480,28481,28483,28484,28485,28486,28488,28489, -28490,28492,28493,28494,28495,28497,28498,28499,28501,28502,28503,28504,28506, -28507,28508,28510,28511,28512,28514,28515,28516,28517,28519,28520,28521,28523, -28524,28525,28526,28528,28529,28530,28531,28533,28534,28535,28537,28538,28539, -28540,28542,28543,28544,28546,28547,28548,28549,28551,28552,28553,28555,28556, -28557,28558,28560,28561,28562,28564,28565,28566,28567,28569,28570,28571,28573, -28574,28575,28576,28578,28579,28580,28582,28583,28584,28585,28587,28588,28589, -28591,28592,28593,28594,28596,28597,28598,28599,28601,28602,28603,28605,28606, -28607,28608,28610,28611,28612,28614,28615,28616,28617,28619,28620,28621,28623, -28624,28625,28626,28628,28629,28630,28632,28633,28634,28635,28637,28638,28639, -28640,28642,28643,28644,28646,28647,28648,28649,28651,28652,28653,28655,28656, -28657,28658,28660,28661,28662,28663,28665,28666,28667,28669,28670,28671,28672, -28674,28675,28676,28678,28679,28680,28681,28683,28684,28685,28686,28688,28689, -28690,28692,28693,28694,28695,28697,28698,28699,28700,28702,28703,28704,28706, -28707,28708,28709,28711,28712,28713,28715,28716,28717,28718,28720,28721,28722, -28723,28725,28726,28727,28729,28730,28731,28732,28734,28735,28736,28737,28739, -28740,28741,28743,28744,28745,28746,28748,28749,28750,28751,28753,28754,28755, -28757,28758,28759,28760,28762,28763,28764,28765,28767,28768,28769,28771,28772, -28773,28774,28776,28777,28778,28779,28781,28782,28783,28785,28786,28787,28788, -28790,28791,28792,28793,28795,28796,28797,28798,28800,28801,28802,28804,28805, -28806,28807,28809,28810,28811,28812,28814,28815,28816,28818,28819,28820,28821, -28823,28824,28825,28826,28828,28829,28830,28831,28833,28834,28835,28837,28838, -28839,28840,28842,28843,28844,28845,28847,28848,28849,28851,28852,28853,28854, -28856,28857,28858,28859,28861,28862,28863,28864,28866,28867,28868,28870,28871, -28872,28873,28875,28876,28877,28878,28880,28881,28882,28883,28885,28886,28887, -28888,28890,28891,28892,28894,28895,28896,28897,28899,28900,28901,28902,28904, -28905,28906,28907,28909,28910,28911,28913,28914,28915,28916,28918,28919,28920, -28921,28923,28924,28925,28926,28928,28929,28930,28931,28933,28934,28935,28937, -28938,28939,28940,28942,28943,28944,28945,28947,28948,28949,28950,28952,28953, -28954,28955,28957,28958,28959,28960,28962,28963,28964,28966,28967,28968,28969, -28971,28972,28973,28974,28976,28977,28978,28979,28981,28982,28983,28984,28986, -28987,28988,28989,28991,28992,28993,28995,28996,28997,28998,29000,29001,29002, -29003,29005,29006,29007,29008,29010,29011,29012,29013,29015,29016,29017,29018, -29020,29021,29022,29023,29025,29026,29027,29028,29030,29031,29032,29034,29035, -29036,29037,29039,29040,29041,29042,29044,29045,29046,29047,29049,29050,29051, -29052,29054,29055,29056,29057,29059,29060,29061,29062,29064,29065,29066,29067, -29069,29070,29071,29072,29074,29075,29076,29077,29079,29080,29081,29083,29084, -29085,29086,29088,29089,29090,29091,29093,29094,29095,29096,29098,29099,29100, -29101,29103,29104,29105,29106,29108,29109,29110,29111,29113,29114,29115,29116, -29118,29119,29120,29121,29123,29124,29125,29126,29128,29129,29130,29131,29133, -29134,29135,29136,29138,29139,29140,29141,29143,29144,29145,29146,29148,29149, -29150,29151,29153,29154,29155,29156,29158,29159,29160,29161,29163,29164,29165, -29166,29168,29169,29170,29171,29173,29174,29175,29176,29178,29179,29180,29181, -29183,29184,29185,29186,29188,29189,29190,29191,29193,29194,29195,29196,29198, -29199,29200,29201,29203,29204,29205,29206,29208,29209,29210,29211,29213,29214, -29215,29216,29218,29219,29220,29221,29223,29224,29225,29226,29228,29229,29230, -29231,29233,29234,29235,29236,29238,29239,29240,29241,29243,29244,29245,29246, -29248,29249,29250,29251,29253,29254,29255,29256,29258,29259,29260,29261,29262, -29264,29265,29266,29267,29269,29270,29271,29272,29274,29275,29276,29277,29279, -29280,29281,29282,29284,29285,29286,29287,29289,29290,29291,29292,29294,29295, -29296,29297,29299,29300,29301,29302,29304,29305,29306,29307,29309,29310,29311, -29312,29313,29315,29316,29317,29318,29320,29321,29322,29323,29325,29326,29327, -29328,29330,29331,29332,29333,29335,29336,29337,29338,29340,29341,29342,29343, -29345,29346,29347,29348,29349,29351,29352,29353,29354,29356,29357,29358,29359, -29361,29362,29363,29364,29366,29367,29368,29369,29371,29372,29373,29374,29376, -29377,29378,29379,29380,29382,29383,29384,29385,29387,29388,29389,29390,29392, -29393,29394,29395,29397,29398,29399,29400,29402,29403,29404,29405,29406,29408, -29409,29410,29411,29413,29414,29415,29416,29418,29419,29420,29421,29423,29424, -29425,29426,29428,29429,29430,29431,29432,29434,29435,29436,29437,29439,29440, -29441,29442,29444,29445,29446,29447,29449,29450,29451,29452,29453,29455,29456, -29457,29458,29460,29461,29462,29463,29465,29466,29467,29468,29470,29471,29472, -29473,29474,29476,29477,29478,29479,29481,29482,29483,29484,29486,29487,29488, -29489,29490,29492,29493,29494,29495,29497,29498,29499,29500,29502,29503,29504, -29505,29507,29508,29509,29510,29511,29513,29514,29515,29516,29518,29519,29520, -29521,29523,29524,29525,29526,29527,29529,29530,29531,29532,29534,29535,29536, -29537,29539,29540,29541,29542,29543,29545,29546,29547,29548,29550,29551,29552, -29553,29555,29556,29557,29558,29559,29561,29562,29563,29564,29566,29567,29568, -29569,29570,29572,29573,29574,29575,29577,29578,29579,29580,29582,29583,29584, -29585,29586,29588,29589,29590,29591,29593,29594,29595,29596,29598,29599,29600, -29601,29602,29604,29605,29606,29607,29609,29610,29611,29612,29613,29615,29616, -29617,29618,29620,29621,29622,29623,29625,29626,29627,29628,29629,29631,29632, -29633,29634,29636,29637,29638,29639,29640,29642,29643,29644,29645,29647,29648, -29649,29650,29651,29653,29654,29655,29656,29658,29659,29660,29661,29662,29664, -29665,29666,29667,29669,29670,29671,29672,29673,29675,29676,29677,29678,29680, -29681,29682,29683,29685,29686,29687,29688,29689,29691,29692,29693,29694,29696, -29697,29698,29699,29700,29702,29703,29704,29705,29707,29708,29709,29710,29711, -29713,29714,29715,29716,29718,29719,29720,29721,29722,29724,29725,29726,29727, -29728,29730,29731,29732,29733,29735,29736,29737,29738,29739,29741,29742,29743, -29744,29746,29747,29748,29749,29750,29752,29753,29754,29755,29757,29758,29759, -29760,29761,29763,29764,29765,29766,29768,29769,29770,29771,29772,29774,29775, -29776,29777,29778,29780,29781,29782,29783,29785,29786,29787,29788,29789,29791, -29792,29793,29794,29796,29797,29798,29799,29800,29802,29803,29804,29805,29806, -29808,29809,29810,29811,29813,29814,29815,29816,29817,29819,29820,29821,29822, -29824,29825,29826,29827,29828,29830,29831,29832,29833,29834,29836,29837,29838, -29839,29841,29842,29843,29844,29845,29847,29848,29849,29850,29851,29853,29854, -29855,29856,29858,29859,29860,29861,29862,29864,29865,29866,29867,29868,29870, -29871,29872,29873,29875,29876,29877,29878,29879,29881,29882,29883,29884,29885, -29887,29888,29889,29890,29892,29893,29894,29895,29896,29898,29899,29900,29901, -29902,29904,29905,29906,29907,29908,29910,29911,29912,29913,29915,29916,29917, -29918,29919,29921,29922,29923,29924,29925,29927,29928,29929,29930,29931,29933, -29934,29935,29936,29938,29939,29940,29941,29942,29944,29945,29946,29947,29948, -29950,29951,29952,29953,29954,29956,29957,29958,29959,29961,29962,29963,29964, -29965,29967,29968,29969,29970,29971,29973,29974,29975,29976,29977,29979,29980, -29981,29982,29983,29985,29986,29987,29988,29990,29991,29992,29993,29994,29996, -29997,29998,29999,30000,30002,30003,30004,30005,30006,30008,30009,30010,30011, -30012,30014,30015,30016,30017,30018,30020,30021,30022,30023,30025,30026,30027, -30028,30029,30031,30032,30033,30034,30035,30037,30038,30039,30040,30041,30043, -30044,30045,30046,30047,30049,30050,30051,30052,30053,30055,30056,30057,30058, -30059,30061,30062,30063,30064,30065,30067,30068,30069,30070,30072,30073,30074, -30075,30076,30078,30079,30080,30081,30082,30084,30085,30086,30087,30088,30090, -30091,30092,30093,30094,30096,30097,30098,30099,30100,30102,30103,30104,30105, -30106,30108,30109,30110,30111,30112,30114,30115,30116,30117,30118,30120,30121, -30122,30123,30124,30126,30127,30128,30129,30130,30132,30133,30134,30135,30136, -30138,30139,30140,30141,30142,30144,30145,30146,30147,30148,30150,30151,30152, -30153,30154,30156,30157,30158,30159,30160,30162,30163,30164,30165,30166,30168, -30169,30170,30171,30172,30174,30175,30176,30177,30178,30180,30181,30182,30183, -30184,30186,30187,30188,30189,30190,30192,30193,30194,30195,30196,30198,30199, -30200,30201,30202,30204,30205,30206,30207,30208,30209,30211,30212,30213,30214, -30215,30217,30218,30219,30220,30221,30223,30224,30225,30226,30227,30229,30230, -30231,30232,30233,30235,30236,30237,30238,30239,30241,30242,30243,30244,30245, -30247,30248,30249,30250,30251,30253,30254,30255,30256,30257,30259,30260,30261, -30262,30263,30264,30266,30267,30268,30269,30270,30272,30273,30274,30275,30276, -30278,30279,30280,30281,30282,30284,30285,30286,30287,30288,30290,30291,30292, -30293,30294,30295,30297,30298,30299,30300,30301,30303,30304,30305,30306,30307, -30309,30310,30311,30312,30313,30315,30316,30317,30318,30319,30321,30322,30323, -30324,30325,30326,30328,30329,30330,30331,30332,30334,30335,30336,30337,30338, -30340,30341,30342,30343,30344,30346,30347,30348,30349,30350,30351,30353,30354, -30355,30356,30357,30359,30360,30361,30362,30363,30365,30366,30367,30368,30369, -30370,30372,30373,30374,30375,30376,30378,30379,30380,30381,30382,30384,30385, -30386,30387,30388,30390,30391,30392,30393,30394,30395,30397,30398,30399,30400, -30401,30403,30404,30405,30406,30407,30408,30410,30411,30412,30413,30414,30416, -30417,30418,30419,30420,30422,30423,30424,30425,30426,30427,30429,30430,30431, -30432,30433,30435,30436,30437,30438,30439,30441,30442,30443,30444,30445,30446, -30448,30449,30450,30451,30452,30454,30455,30456,30457,30458,30459,30461,30462, -30463,30464,30465,30467,30468,30469,30470,30471,30472,30474,30475,30476,30477, -30478,30480,30481,30482,30483,30484,30486,30487,30488,30489,30490,30491,30493, -30494,30495,30496,30497,30499,30500,30501,30502,30503,30504,30506,30507,30508, -30509,30510,30512,30513,30514,30515,30516,30517,30519,30520,30521,30522,30523, -30525,30526,30527,30528,30529,30530,30532,30533,30534,30535,30536,30538,30539, -30540,30541,30542,30543,30545,30546,30547,30548,30549,30550,30552,30553,30554, -30555,30556,30558,30559,30560,30561,30562,30563,30565,30566,30567,30568,30569, -30571,30572,30573,30574,30575,30576,30578,30579,30580,30581,30582,30584,30585, -30586,30587,30588,30589,30591,30592,30593,30594,30595,30596,30598,30599,30600, -30601,30602,30604,30605,30606,30607,30608,30609,30611,30612,30613,30614,30615, -30616,30618,30619,30620,30621,30622,30624,30625,30626,30627,30628,30629,30631, -30632,30633,30634,30635,30636,30638,30639,30640,30641,30642,30644,30645,30646, -30647,30648,30649,30651,30652,30653,30654,30655,30656,30658,30659,30660,30661, -30662,30663,30665,30666,30667,30668,30669,30671,30672,30673,30674,30675,30676, -30678,30679,30680,30681,30682,30683,30685,30686,30687,30688,30689,30690,30692, -30693,30694,30695,30696,30698,30699,30700,30701,30702,30703,30705,30706,30707, -30708,30709,30710,30712,30713,30714,30715,30716,30717,30719,30720,30721,30722, -30723,30724,30726,30727,30728,30729,30730,30732,30733,30734,30735,30736,30737, -30739,30740,30741,30742,30743,30744,30746,30747,30748,30749,30750,30751,30753, -30754,30755,30756,30757,30758,30760,30761,30762,30763,30764,30765,30767,30768, -30769,30770,30771,30772,30774,30775,30776,30777,30778,30779,30781,30782,30783, -30784,30785,30786,30788,30789,30790,30791,30792,30794,30795,30796,30797,30798, -30799,30801,30802,30803,30804,30805,30806,30808,30809,30810,30811,30812,30813, -30815,30816,30817,30818,30819,30820,30822,30823,30824,30825,30826,30827,30829, -30830,30831,30832,30833,30834,30836,30837,30838,30839,30840,30841,30843,30844, -30845,30846,30847,30848,30850,30851,30852,30853,30854,30855,30857,30858,30859, -30860,30861,30862,30864,30865,30866,30867,30868,30869,30870,30872,30873,30874, -30875,30876,30877,30879,30880,30881,30882,30883,30884,30886,30887,30888,30889, -30890,30891,30893,30894,30895,30896,30897,30898,30900,30901,30902,30903,30904, -30905,30907,30908,30909,30910,30911,30912,30914,30915,30916,30917,30918,30919, -30921,30922,30923,30924,30925,30926,30927,30929,30930,30931,30932,30933,30934, -30936,30937,30938,30939,30940,30941,30943,30944,30945,30946,30947,30948,30950, -30951,30952,30953,30954,30955,30957,30958,30959,30960,30961,30962,30963,30965, -30966,30967,30968,30969,30970,30972,30973,30974,30975,30976,30977,30979,30980, -30981,30982,30983,30984,30986,30987,30988,30989,30990,30991,30992,30994,30995, -30996,30997,30998,30999,31001,31002,31003,31004,31005,31006,31008,31009,31010, -31011,31012,31013,31014,31016,31017,31018,31019,31020,31021,31023,31024,31025, -31026,31027,31028,31030,31031,31032,31033,31034,31035,31036,31038,31039,31040, -31041,31042,31043,31045,31046,31047,31048,31049,31050,31051,31053,31054,31055, -31056,31057,31058,31060,31061,31062,31063,31064,31065,31067,31068,31069,31070, -31071,31072,31073,31075,31076,31077,31078,31079,31080,31082,31083,31084,31085, -31086,31087,31088,31090,31091,31092,31093,31094,31095,31097,31098,31099,31100, -31101,31102,31103,31105,31106,31107,31108,31109,31110,31112,31113,31114,31115, -31116,31117,31118,31120,31121,31122,31123,31124,31125,31127,31128,31129,31130, -31131,31132,31133,31135,31136,31137,31138,31139,31140,31141,31143,31144,31145, -31146,31147,31148,31150,31151,31152,31153,31154,31155,31156,31158,31159,31160, -31161,31162,31163,31165,31166,31167,31168,31169,31170,31171,31173,31174,31175, -31176,31177,31178,31179,31181,31182,31183,31184,31185,31186,31188,31189,31190, -31191,31192,31193,31194,31196,31197,31198,31199,31200,31201,31202,31204,31205, -31206,31207,31208,31209,31211,31212,31213,31214,31215,31216,31217,31219,31220, -31221,31222,31223,31224,31225,31227,31228,31229,31230,31231,31232,31233,31235, -31236,31237,31238,31239,31240,31242,31243,31244,31245,31246,31247,31248,31250, -31251,31252,31253,31254,31255,31256,31258,31259,31260,31261,31262,31263,31264, -31266,31267,31268,31269,31270,31271,31272,31274,31275,31276,31277,31278,31279, -31280,31282,31283,31284,31285,31286,31287,31289,31290,31291,31292,31293,31294, -31295,31297,31298,31299,31300,31301,31302,31303,31305,31306,31307,31308,31309, -31310,31311,31313,31314,31315,31316,31317,31318,31319,31321,31322,31323,31324, -31325,31326,31327,31329,31330,31331,31332,31333,31334,31335,31337,31338,31339, -31340,31341,31342,31343,31345,31346,31347,31348,31349,31350,31351,31353,31354, -31355,31356,31357,31358,31359,31361,31362,31363,31364,31365,31366,31367,31369, -31370,31371,31372,31373,31374,31375,31377,31378,31379,31380,31381,31382,31383, -31385,31386,31387,31388,31389,31390,31391,31392,31394,31395,31396,31397,31398, -31399,31400,31402,31403,31404,31405,31406,31407,31408,31410,31411,31412,31413, -31414,31415,31416,31418,31419,31420,31421,31422,31423,31424,31426,31427,31428, -31429,31430,31431,31432,31434,31435,31436,31437,31438,31439,31440,31441,31443, -31444,31445,31446,31447,31448,31449,31451,31452,31453,31454,31455,31456,31457, -31459,31460,31461,31462,31463,31464,31465,31466,31468,31469,31470,31471,31472, -31473,31474,31476,31477,31478,31479,31480,31481,31482,31484,31485,31486,31487, -31488,31489,31490,31491,31493,31494,31495,31496,31497,31498,31499,31501,31502, -31503,31504,31505,31506,31507,31509,31510,31511,31512,31513,31514,31515,31516, -31518,31519,31520,31521,31522,31523,31524,31526,31527,31528,31529,31530,31531, -31532,31533,31535,31536,31537,31538,31539,31540,31541,31543,31544,31545,31546, -31547,31548,31549,31550,31552,31553,31554,31555,31556,31557,31558,31560,31561, -31562,31563,31564,31565,31566,31567,31569,31570,31571,31572,31573,31574,31575, -31577,31578,31579,31580,31581,31582,31583,31584,31586,31587,31588,31589,31590, -31591,31592,31594,31595,31596,31597,31598,31599,31600,31601,31603,31604,31605, -31606,31607,31608,31609,31610,31612,31613,31614,31615,31616,31617,31618,31620, -31621,31622,31623,31624,31625,31626,31627,31629,31630,31631,31632,31633,31634, -31635,31636,31638,31639,31640,31641,31642,31643,31644,31645,31647,31648,31649, -31650,31651,31652,31653,31655,31656,31657,31658,31659,31660,31661,31662,31664, -31665,31666,31667,31668,31669,31670,31671,31673,31674,31675,31676,31677,31678, -31679,31680,31682,31683,31684,31685,31686,31687,31688,31689,31691,31692,31693, -31694,31695,31696,31697,31698,31700,31701,31702,31703,31704,31705,31706,31707, -31709,31710,31711,31712,31713,31714,31715,31717,31718,31719,31720,31721,31722, -31723,31724,31726,31727,31728,31729,31730,31731,31732,31733,31735,31736,31737, -31738,31739,31740,31741,31742,31744,31745,31746,31747,31748,31749,31750,31751, -31753,31754,31755,31756,31757,31758,31759,31760,31761,31763,31764,31765,31766, -31767,31768,31769,31770,31772,31773,31774,31775,31776,31777,31778,31779,31781, -31782,31783,31784,31785,31786,31787,31788,31790,31791,31792,31793,31794,31795, -31796,31797,31799,31800,31801,31802,31803,31804,31805,31806,31808,31809,31810, -31811,31812,31813,31814,31815,31816,31818,31819,31820,31821,31822,31823,31824, -31825,31827,31828,31829,31830,31831,31832,31833,31834,31836,31837,31838,31839, -31840,31841,31842,31843,31845,31846,31847,31848,31849,31850,31851,31852,31853, -31855,31856,31857,31858,31859,31860,31861,31862,31864,31865,31866,31867,31868, -31869,31870,31871,31872,31874,31875,31876,31877,31878,31879,31880,31881,31883, -31884,31885,31886,31887,31888,31889,31890,31892,31893,31894,31895,31896,31897, -31898,31899,31900,31902,31903,31904,31905,31906,31907,31908,31909,31910,31912, -31913,31914,31915,31916,31917,31918,31919,31921,31922,31923,31924,31925,31926, -31927,31928,31929,31931,31932,31933,31934,31935,31936,31937,31938,31940,31941, -31942,31943,31944,31945,31946,31947,31948,31950,31951,31952,31953,31954,31955, -31956,31957,31958,31960,31961,31962,31963,31964,31965,31966,31967,31969,31970, -31971,31972,31973,31974,31975,31976,31977,31979,31980,31981,31982,31983,31984, -31985,31986,31987,31989,31990,31991,31992,31993,31994,31995,31996,31997,31999, -32000,32001,32002,32003,32004,32005,32006,32007,32009,32010,32011,32012,32013, -32014,32015,32016,32018,32019,32020,32021,32022,32023,32024,32025,32026,32028, -32029,32030,32031,32032,32033,32034,32035,32036,32038,32039,32040,32041,32042, -32043,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32055,32056, -32058,32059,32060,32061,32062,32063,32064,32065,32066,32068,32069,32070,32071, -32072,32073,32074,32075,32076,32078,32079,32080,32081,32082,32083,32084,32085, -32086,32087,32089,32090,32091,32092,32093,32094,32095,32096,32097,32099,32100, -32101,32102,32103,32104,32105,32106,32107,32109,32110,32111,32112,32113,32114, -32115,32116,32117,32119,32120,32121,32122,32123,32124,32125,32126,32127,32129, -32130,32131,32132,32133,32134,32135,32136,32137,32138,32140,32141,32142,32143, -32144,32145,32146,32147,32148,32150,32151,32152,32153,32154,32155,32156,32157, -32158,32160,32161,32162,32163,32164,32165,32166,32167,32168,32169,32171,32172, -32173,32174,32175,32176,32177,32178,32179,32181,32182,32183,32184,32185,32186, -32187,32188,32189,32190,32192,32193,32194,32195,32196,32197,32198,32199,32200, -32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32213,32214,32215, -32216,32217,32218,32219,32220,32221,32222,32224,32225,32226,32227,32228,32229, -32230,32231,32232,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243, -32245,32246,32247,32248,32249,32250,32251,32252,32253,32254,32256,32257,32258, -32259,32260,32261,32262,32263,32264,32265,32267,32268,32269,32270,32271,32272, -32273,32274,32275,32276,32278,32279,32280,32281,32282,32283,32284,32285,32286, -32287,32289,32290,32291,32292,32293,32294,32295,32296,32297,32299,32300,32301, -32302,32303,32304,32305,32306,32307,32308,32310,32311,32312,32313,32314,32315, -32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32327,32328,32329, -32330,32331,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32344, -32345,32346,32347,32348,32349,32350,32351,32352,32353,32355,32356,32357,32358, -32359,32360,32361,32362,32363,32364,32366,32367,32368,32369,32370,32371,32372, -32373,32374,32375,32376,32378,32379,32380,32381,32382,32383,32384,32385,32386, -32387,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32400,32401, -32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32415, -32416,32417,32418,32419,32420,32421,32423,32424,32425,32426,32427,32428,32429, -32430,32431,32432,32433,32435,32436,32437,32438,32439,32440,32441,32442,32443, -32444,32446,32447,32448,32449,32450,32451,32452,32453,32454,32455,32456,32458, -32459,32460,32461,32462,32463,32464,32465,32466,32467,32468,32470,32471,32472, -32473,32474,32475,32476,32477,32478,32479,32480,32482,32483,32484,32485,32486, -32487,32488,32489,32490,32491,32493,32494,32495,32496,32497,32498,32499,32500, -32501,32502,32503,32505,32506,32507,32508,32509,32510,32511,32512,32513,32514, -32515,32517,32518,32519,32520,32521,32522,32523,32524,32525,32526,32527,32529, -32530,32531,32532,32533,32534,32535,32536,32537,32538,32539,32541,32542,32543, -32544,32545,32546,32547,32548,32549,32550,32551,32552,32554,32555,32556,32557, -32558,32559,32560,32561,32562,32563,32564,32566,32567,32568,32569,32570,32571, -32572,32573,32574,32575,32576,32578,32579,32580,32581,32582,32583,32584,32585, -32586,32587,32588,32590,32591,32592,32593,32594,32595,32596,32597,32598,32599, -32600,32601,32603,32604,32605,32606,32607,32608,32609,32610,32611,32612,32613, -32615,32616,32617,32618,32619,32620,32621,32622,32623,32624,32625,32626,32628, -32629,32630,32631,32632,32633,32634,32635,32636,32637,32638,32639,32641,32642, -32643,32644,32645,32646,32647,32648,32649,32650,32651,32653,32654,32655,32656, -32657,32658,32659,32660,32661,32662,32663,32664,32666,32667,32668,32669,32670, -32671,32672,32673,32674,32675,32676,32677,32679,32680,32681,32682,32683,32684, -32685,32686,32687,32688,32689,32690,32692,32693,32694,32695,32696,32697,32698, -32699,32700,32701,32702,32703,32705,32706,32707,32708,32709,32710,32711,32712, -32713,32714,32715,32716,32718,32719,32720,32721,32722,32723,32724,32725,32726, -32727,32728,32729,32731,32732,32733,32734,32735,32736,32737,32738,32739,32740, -32741,32742,32744,32745,32746,32747,32748,32749,32750,32751,32752,32753,32754, -32755,32756,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767,32768, -32769,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782, -32783,32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796, -32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32808,32809,32810, -32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32823,32824, -32826,32827,32828,32829,32830,32831,32832,32833,32834,32835,32836,32837,32839, -32840,32841,32842,32843,32844,32845,32846,32847,32848,32849,32850,32851,32853, -32854,32855,32856,32857,32858,32859,32860,32861,32862,32863,32864,32865,32867, -32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880, -32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32894, -32896,32897,32898,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908, -32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922, -32923,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936, -32937,32939,32940,32941,32942,32943,32944,32945,32946,32947,32948,32949,32950, -32951,32952,32954,32955,32956,32957,32958,32959,32960,32961,32962,32963,32964, -32965,32966,32967,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978, -32979,32980,32981,32982,32984,32985,32986,32987,32988,32989,32990,32991,32992, -32993,32994,32995,32996,32997,32999,33000,33001,33002,33003,33004,33005,33006, -33007,33008,33009,33010,33011,33012,33014,33015,33016,33017,33018,33019,33020, -33021,33022,33023,33024,33025,33026,33027,33029,33030,33031,33032,33033,33034, -33035,33036,33037,33038,33039,33040,33041,33042,33043,33045,33046,33047,33048, -33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33060,33061,33062, -33063,33064,33065,33066,33067,33068,33069,33070,33071,33072,33073,33074,33076, -33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089, -33090,33092,33093,33094,33095,33096,33097,33098,33099,33100,33101,33102,33103, -33104,33105,33106,33108,33109,33110,33111,33112,33113,33114,33115,33116,33117, -33118,33119,33120,33121,33122,33124,33125,33126,33127,33128,33129,33130,33131, -33132,33133,33134,33135,33136,33137,33138,33140,33141,33142,33143,33144,33145, -33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33157,33158,33159, -33160,33161,33162,33163,33164,33165,33166,33167,33168,33169,33170,33171,33173, -33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186, -33187,33188,33190,33191,33192,33193,33194,33195,33196,33197,33198,33199,33200, -33201,33202,33203,33204,33205,33207,33208,33209,33210,33211,33212,33213,33214, -33215,33216,33217,33218,33219,33220,33221,33222,33224,33225,33226,33227,33228, -33229,33230,33231,33232,33233,33234,33235,33236,33237,33238,33239,33241,33242, -33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255, -33256,33257,33259,33260,33261,33262,33263,33264,33265,33266,33267,33268,33269, -33270,33271,33272,33273,33274,33276,33277,33278,33279,33280,33281,33282,33283, -33284,33285,33286,33287,33288,33289,33290,33291,33292,33294,33295,33296,33297, -33298,33299,33300,33301,33302,33303,33304,33305,33306,33307,33308,33309,33310, -33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324, -33325,33326,33327,33328,33329,33331,33332,33333,33334,33335,33336,33337,33338, -33339,33340,33341,33342,33343,33344,33345,33346,33347,33349,33350,33351,33352, -33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365, -33366,33368,33369,33370,33371,33372,33373,33374,33375,33376,33377,33378,33379, -33380,33381,33382,33383,33384,33385,33387,33388,33389,33390,33391,33392,33393, -33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33406,33407, -33408,33409,33410,33411,33412,33413,33414,33415,33416,33417,33418,33419,33420, -33421,33422,33423,33424,33426,33427,33428,33429,33430,33431,33432,33433,33434, -33435,33436,33437,33438,33439,33440,33441,33442,33443,33445,33446,33447,33448, -33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33461, -33462,33463,33465,33466,33467,33468,33469,33470,33471,33472,33473,33474,33475, -33476,33477,33478,33479,33480,33481,33482,33483,33484,33486,33487,33488,33489, -33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502, -33503,33504,33505,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516, -33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33528,33529,33530, -33531,33532,33533,33534,33535,33536,33537,33538,33539,33540,33541,33542,33543, -33544,33545,33546,33547,33549,33550,33551,33552,33553,33554,33555,33556,33557, -33558,33559,33560,33561,33562,33563,33564,33565,33566,33567,33568,33569,33571, -33572,33573,33574,33575,33576,33577,33578,33579,33580,33581,33582,33583,33584, -33585,33586,33587,33588,33589,33590,33591,33593,33594,33595,33596,33597,33598, -33599,33600,33601,33602,33603,33604,33605,33606,33607,33608,33609,33610,33611, -33612,33613,33615,33616,33617,33618,33619,33620,33621,33622,33623,33624,33625, -33626,33627,33628,33629,33630,33631,33632,33633,33634,33635,33636,33638,33639, -33640,33641,33642,33643,33644,33645,33646,33647,33648,33649,33650,33651,33652, -33653,33654,33655,33656,33657,33658,33659,33661,33662,33663,33664,33665,33666, -33667,33668,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679, -33680,33681,33682,33683,33685,33686,33687,33688,33689,33690,33691,33692,33693, -33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33705,33706, -33707,33709,33710,33711,33712,33713,33714,33715,33716,33717,33718,33719,33720, -33721,33722,33723,33724,33725,33726,33727,33728,33729,33730,33731,33732,33734, -33735,33736,33737,33738,33739,33740,33741,33742,33743,33744,33745,33746,33747, -33748,33749,33750,33751,33752,33753,33754,33755,33756,33757,33758,33760,33761, -33762,33763,33764,33765,33766,33767,33768,33769,33770,33771,33772,33773,33774, -33775,33776,33777,33778,33779,33780,33781,33782,33783,33784,33786,33787,33788, -33789,33790,33791,33792,33793,33794,33795,33796,33797,33798,33799,33800,33801, -33802,33803,33804,33805,33806,33807,33808,33809,33810,33812,33813,33814,33815, -33816,33817,33818,33819,33820,33821,33822,33823,33824,33825,33826,33827,33828, -33829,33830,33831,33832,33833,33834,33835,33836,33837,33838,33840,33841,33842, -33843,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853,33854,33855, -33856,33857,33858,33859,33860,33861,33862,33863,33864,33865,33866,33868,33869, -33870,33871,33872,33873,33874,33875,33876,33877,33878,33879,33880,33881,33882, -33883,33884,33885,33886,33887,33888,33889,33890,33891,33892,33893,33894,33895, -33897,33898,33899,33900,33901,33902,33903,33904,33905,33906,33907,33908,33909, -33910,33911,33912,33913,33914,33915,33916,33917,33918,33919,33920,33921,33922, -33923,33924,33925,33927,33928,33929,33930,33931,33932,33933,33934,33935,33936, -33937,33938,33939,33940,33941,33942,33943,33944,33945,33946,33947,33948,33949, -33950,33951,33952,33953,33954,33955,33956,33958,33959,33960,33961,33962,33963, -33964,33965,33966,33967,33968,33969,33970,33971,33972,33973,33974,33975,33976, -33977,33978,33979,33980,33981,33982,33983,33984,33985,33986,33987,33988,33990, -33991,33992,33993,33994,33995,33996,33997,33998,33999,34000,34001,34002,34003, -34004,34005,34006,34007,34008,34009,34010,34011,34012,34013,34014,34015,34016, -34017,34018,34019,34020,34021,34023,34024,34025,34026,34027,34028,34029,34030, -34031,34032,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043, -34044,34045,34046,34047,34048,34049,34050,34051,34052,34053,34054,34055,34056, -34058,34059,34060,34061,34062,34063,34064,34065,34066,34067,34068,34069,34070, -34071,34072,34073,34074,34075,34076,34077,34078,34079,34080,34081,34082,34083, -34084,34085,34086,34087,34088,34089,34090,34091,34092,34094,34095,34096,34097, -34098,34099,34100,34101,34102,34103,34104,34105,34106,34107,34108,34109,34110, -34111,34112,34113,34114,34115,34116,34117,34118,34119,34120,34121,34122,34123, -34124,34125,34126,34127,34128,34129,34130,34132,34133,34134,34135,34136,34137, -34138,34139,34140,34141,34142,34143,34144,34145,34146,34147,34148,34149,34150, -34151,34152,34153,34154,34155,34156,34157,34158,34159,34160,34161,34162,34163, -34164,34165,34166,34167,34168,34169,34170,34171,34173,34174,34175,34176,34177, -34178,34179,34180,34181,34182,34183,34184,34185,34186,34187,34188,34189,34190, -34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34203, -34204,34205,34206,34207,34208,34209,34210,34211,34212,34213,34214,34216,34217, -34218,34219,34220,34221,34222,34223,34224,34225,34226,34227,34228,34229,34230, -34231,34232,34233,34234,34235,34236,34237,34238,34239,34240,34241,34242,34243, -34244,34245,34246,34247,34248,34249,34250,34251,34252,34253,34254,34255,34256, -34257,34258,34259,34260,34262,34263,34264,34265,34266,34267,34268,34269,34270, -34271,34272,34273,34274,34275,34276,34277,34278,34279,34280,34281,34282,34283, -34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296, -34297,34298,34299,34300,34301,34302,34303,34304,34305,34306,34307,34308,34309, -34310,34312,34313,34314,34315,34316,34317,34318,34319,34320,34321,34322,34323, -34324,34325,34326,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336, -34337,34338,34339,34340,34341,34342,34343,34344,34345,34346,34347,34348,34349, -34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34360,34361,34362, -34363,34364,34365,34366,34368,34369,34370,34371,34372,34373,34374,34375,34376, -34377,34378,34379,34380,34381,34382,34383,34384,34385,34386,34387,34388,34389, -34390,34391,34392,34393,34394,34395,34396,34397,34398,34399,34400,34401,34402, -34403,34404,34405,34406,34407,34408,34409,34410,34411,34412,34413,34414,34415, -34416,34417,34418,34419,34420,34421,34422,34423,34424,34425,34426,34427,34428, -34429,34431,34432,34433,34434,34435,34436,34437,34438,34439,34440,34441,34442, -34443,34444,34445,34446,34447,34448,34449,34450,34451,34452,34453,34454,34455, -34456,34457,34458,34459,34460,34461,34462,34463,34464,34465,34466,34467,34468, -34469,34470,34471,34472,34473,34474,34475,34476,34477,34478,34479,34480,34481, -34482,34483,34484,34485,34486,34487,34488,34489,34490,34491,34492,34493,34494, -34495,34496,34497,34498,34499,34500,34501,34502,34503,34504,34506,34507,34508, -34509,34510,34511,34512,34513,34514,34515,34516,34517,34518,34519,34520,34521, -34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534, -34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547, -34548,34549,34550,34551,34552,34553,34554,34555,34556,34557,34558,34559,34560, -34561,34562,34563,34564,34565,34566,34567,34568,34569,34570,34571,34572,34573, -34574,34575,34576,34577,34578,34579,34580,34581,34582,34583,34584,34585,34586, -34587,34588,34589,34590,34591,34592,34593,34594,34595,34596,34597,34598,34599, -34600,34601,34602,34603,34605,34606,34607,34608,34609,34610,34611,34612,34613, -34614,34615,34616,34617,34618,34619,34620,34621,34622,34623,34624,34625,34626, -34627,34628,34629,34630,34631,34632,34633,34634,34635,34636,34637,34638,34639, -34640,34641,34642,34643,34644,34645,34646,34647,34648,34649,34650,34651,34652, -34653,34654,34655,34656,34657,34658,34659,34660,34661,34662,34663,34664,34665, -34666,34667,34668,34669,34670,34671,34672,34673,34674,34675,34676,34677,34678, -34679,34680,34681,34682,34683,34684,34685,34686,34687,34688,34689,34690,34691, -34692,34693,34694,34695,34696,34697,34698,34699,34700,34701,34702,34703,34704, -34705,34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717, -34718,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730, -34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741,34742,34743, -34744,34745,34746,34747,34748,34749,34750,34751,34752,34753,34754,34755,34756, -34757,34758,34759,34760,34761,34762,34763,34764,34765,34766,34767,34768,34769, -34770,34771,34772,34773,34774,34775,34776,34777,34778,34779,34780,34781,34782, -34783,34784,34785,34786,34787,34788,34789,34790,34791,34792,34793,34794,34795, -34796,34797,34798,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808, -34809,34810,34811,34812,34813,34814,34815,34816,34817,34818,34819,34820,34821, -34822,34823,34824,34825,34826,34827,34828,34829,34830,34831,34832,34833,34834, -34835,34836,34837,34838,34839,34840,34841,34842,34843,34844,34845,34846,34847, -34848,34849,34850,34851,34852,34853,34854,34855,34856,34857,34858,34859,34860, -34861,34862,34863,34864,34865,34866,34867,34868,34869,34870,34871,34872,34873, -34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885,34886, -34887,34888,34889,34890,34891,34892,34893,34894,34895,34896,34897,34898,34899, -34900,34901,34902,34903,34904,34905,34906,34907,34908,34909,34910,34911,34912, -34913,34914,34915,34916,34917,34918,34919,34920,34921,34922,34923,34924,34925, -34926,34927,34928,34929,34930,34931,34932,34933,34934,34935,34936,34937,34938, -34939,34940,34941,34942,34943,34944,34945,34946,34947,34948,34949,34950,34951, -34952,34953,34954,34955,34956,34957,34958,34959,34960,34961,34962,34963,34964, -34965,34966,34967,34968,34969,34970,34971,34972,34973,34974,34975,34976,34977, -34978,34979,34980,34981,34982,34983,34984,34985,34986,34987,34988,34989,34990, -34991,34992,34993,34994,34995,34996,34997,34998,34999,35000,35001,35002,35003, -35004,35005,35006,35007,35008,35009,35010,35011,35012,35013,35014,35015,35016, -35017,35018,35019,35020,35021,35022,35023,35024,35025,35026,35027,35028,35029, -35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041,35042, -35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053,35054,35055, -35056,35057,35058,35059,35060,35061,35062,35062,35063,35064,35065,35066,35067, -35068,35069,35070,35071,35072,35073,35074,35075,35076,35077,35078,35079,35080, -35081,35082,35083,35084,35085,35086,35087,35088,35089,35090,35091,35092,35093, -35094,35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106, -35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119, -35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132, -35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145, -35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158, -35159,35160,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170, -35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183, -35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35195,35196, -35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209, -35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222, -35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235, -35236,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247, -35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260, -35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273, -35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286, -35287,35288,35289,35290,35291,35292,35293,35294,35295,35296,35297,35298,35299, -35299,35300,35301,35302,35303,35304,35305,35306,35307,35308,35309,35310,35311, -35312,35313,35314,35315,35316,35317,35318,35319,35320,35321,35322,35323,35324, -35325,35326,35327,35328,35329,35330,35331,35332,35333,35334,35335,35336,35337, -35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350, -35351,35352,35353,35354,35354,35355,35356,35357,35358,35359,35360,35361,35362, -35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375, -35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388, -35389,35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401, -35402,35403,35404,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413, -35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426, -35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439, -35440,35441,35442,35443,35444,35445,35446,35447,35448,35449,35450,35450,35451, -35452,35453,35454,35455,35456,35457,35458,35459,35460,35461,35462,35463,35464, -35465,35466,35467,35468,35469,35470,35471,35472,35473,35474,35475,35476,35477, -35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490, -35491,35492,35493,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502, -35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515, -35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528, -35529,35530,35531,35532,35533,35533,35534,35535,35536,35537,35538,35539,35540, -35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553, -35554,35555,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566, -35567,35568,35569,35570,35571,35571,35572,35573,35574,35575,35576,35577,35578, -35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35591, -35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604, -35605,35606,35607,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616, -35617,35618,35619,35620,35621,35622,35623,35624,35625,35626,35627,35628,35629, -35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642, -35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,35654, -35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667, -35668,35669,35670,35671,35672,35673,35674,35675,35675,35676,35677,35678,35679, -35680,35681,35682,35683,35684,35685,35686,35687,35688,35689,35690,35691,35692, -35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705, -35706,35707,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717, -35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730, -35731,35732,35733,35734,35735,35736,35737,35738,35738,35739,35740,35741,35742, -35743,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755, -35756,35757,35758,35759,35760,35761,35762,35763,35764,35765,35766,35767,35767, -35768,35769,35770,35771,35772,35773,35774,35775,35776,35777,35778,35779,35780, -35781,35782,35783,35784,35785,35786,35787,35788,35789,35790,35791,35792,35793, -35794,35795,35796,35796,35797,35798,35799,35800,35801,35802,35803,35804,35805, -35806,35807,35808,35809,35810,35811,35812,35813,35814,35815,35816,35817,35818, -35819,35820,35821,35822,35823,35824,35824,35825,35826,35827,35828,35829,35830, -35831,35832,35833,35834,35835,35836,35837,35838,35839,35840,35841,35842,35843, -35844,35845,35846,35847,35848,35849,35850,35851,35851,35852,35853,35854,35855, -35856,35857,35858,35859,35860,35861,35862,35863,35864,35865,35866,35867,35868, -35869,35870,35871,35872,35873,35874,35875,35876,35877,35878,35878,35879,35880, -35881,35882,35883,35884,35885,35886,35887,35888,35889,35890,35891,35892,35893, -35894,35895,35896,35897,35898,35899,35900,35901,35902,35903,35903,35904,35905, -35906,35907,35908,35909,35910,35911,35912,35913,35914,35915,35916,35917,35918, -35919,35920,35921,35922,35923,35924,35925,35926,35927,35928,35929,35929,35930, -35931,35932,35933,35934,35935,35936,35937,35938,35939,35940,35941,35942,35943, -35944,35945,35946,35947,35948,35949,35950,35951,35952,35953,35953,35954,35955, -35956,35957,35958,35959,35960,35961,35962,35963,35964,35965,35966,35967,35968, -35969,35970,35971,35972,35973,35974,35975,35976,35977,35977,35978,35979,35980, -35981,35982,35983,35984,35985,35986,35987,35988,35989,35990,35991,35992,35993, -35994,35995,35996,35997,35998,35999,36000,36001,36001,36002,36003,36004,36005, -36006,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36017,36018, -36019,36020,36021,36022,36023,36024,36024,36025,36026,36027,36028,36029,36030, -36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043, -36044,36045,36046,36047,36047,36048,36049,36050,36051,36052,36053,36054,36055, -36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068, -36069,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080, -36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36091,36092, -36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105, -36106,36107,36108,36109,36110,36111,36112,36113,36113,36114,36115,36116,36117, -36118,36119,36120,36121,36122,36123,36124,36125,36126,36127,36128,36129,36130, -36131,36132,36133,36134,36134,36135,36136,36137,36138,36139,36140,36141,36142, -36143,36144,36145,36146,36147,36148,36149,36150,36151,36152,36153,36154,36154, -36155,36156,36157,36158,36159,36160,36161,36162,36163,36164,36165,36166,36167, -36168,36169,36170,36171,36172,36173,36174,36175,36175,36176,36177,36178,36179, -36180,36181,36182,36183,36184,36185,36186,36187,36188,36189,36190,36191,36192, -36193,36194,36195,36195,36196,36197,36198,36199,36200,36201,36202,36203,36204, -36205,36206,36207,36208,36209,36210,36211,36212,36213,36214,36215,36215,36216, -36217,36218,36219,36220,36221,36222,36223,36224,36225,36226,36227,36228,36229, -36230,36231,36232,36233,36234,36235,36235,36236,36237,36238,36239,36240,36241, -36242,36243,36244,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254, -36254,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265,36266, -36267,36268,36269,36270,36271,36272,36273,36273,36274,36275,36276,36277,36278, -36279,36280,36281,36282,36283,36284,36285,36286,36287,36288,36289,36290,36291, -36292,36292,36293,36294,36295,36296,36297,36298,36299,36300,36301,36302,36303, -36304,36305,36306,36307,36308,36309,36310,36310,36311,36312,36313,36314,36315, -36316,36317,36318,36319,36320,36321,36322,36323,36324,36325,36326,36327,36328, -36329,36329,36330,36331,36332,36333,36334,36335,36336,36337,36338,36339,36340, -36341,36342,36343,36344,36345,36346,36347,36347,36348,36349,36350,36351,36352, -36353,36354,36355,36356,36357,36358,36359,36360,36361,36362,36363,36364,36365, -36365,36366,36367,36368,36369,36370,36371,36372,36373,36374,36375,36376,36377, -36378,36379,36380,36381,36382,36382,36383,36384,36385,36386,36387,36388,36389, -36390,36391,36392,36393,36394,36395,36396,36397,36398,36399,36400,36400,36401, -36402,36403,36404,36405,36406,36407,36408,36409,36410,36411,36412,36413,36414, -36415,36416,36417,36417,36418,36419,36420,36421,36422,36423,36424,36425,36426, -36427,36428,36429,36430,36431,36432,36433,36434,36434,36435,36436,36437,36438, -36439,36440,36441,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451, -36451,36452,36453,36454,36455,36456,36457,36458,36459,36460,36461,36462,36463, -36464,36465,36466,36467,36468,36468,36469,36470,36471,36472,36473,36474,36475, -36476,36477,36478,36479,36480,36481,36482,36483,36484,36484,36485,36486,36487, -36488,36489,36490,36491,36492,36493,36494,36495,36496,36497,36498,36499,36500, -36501,36501,36502,36503,36504,36505,36506,36507,36508,36509,36510,36511,36512, -36513,36514,36515,36516,36517,36517,36518,36519,36520,36521,36522,36523,36524, -36525,36526,36527,36528,36529,36530,36531,36532,36533,36533,36534,36535,36536, -36537,36538,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549, -36549,36550,36551,36552,36553,36554,36555,36556,36557,36558,36559,36560,36561, -36562,36563,36564,36565,36565,36566,36567,36568,36569,36570,36571,36572,36573, -36574,36575,36576,36577,36578,36579,36580,36581,36581,36582,36583,36584,36585, -36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36596,36597, -36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610, -36611,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622, -36623,36624,36625,36626,36627,36627,36628,36629,36630,36631,36632,36633,36634, -36635,36636,36637,36638,36639,36640,36641,36642,36642,36643,36644,36645,36646, -36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36657,36658, -36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671, -36672,36672,36673,36674,36675,36676,36677,36678,36679,36680,36681,36682,36683, -36684,36685,36686,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695, -36696,36697,36698,36699,36700,36701,36701,36702,36703,36704,36705,36706,36707, -36708,36709,36710,36711,36712,36713,36714,36715,36715,36716,36717,36718,36719, -36720,36721,36722,36723,36724,36725,36726,36727,36728,36729,36730,36730,36731, -36732,36733,36734,36735,36736,36737,36738,36739,36740,36741,36742,36743,36744, -36744,36745,36746,36747,36748,36749,36750,36751,36752,36753,36754,36755,36756, -36757,36758,36758,36759,36760,36761,36762,36763,36764,36765,36766,36767,36768, -36769,36770,36771,36772,36772,36773,36774,36775,36776,36777,36778,36779,36780, -36781,36782,36783,36784,36785,36786,36786,36787,36788,36789,36790,36791,36792, -36793,36794,36795,36796,36797,36798,36799,36800,36800,36801,36802,36803,36804, -36805,36806,36807,36808,36809,36810,36811,36812,36813,36814,36814,36815,36816, -36817,36818,36819,36820,36821,36822,36823,36824,36825,36826,36827,36828,36828, -36829,36830,36831,36832,36833,36834,36835,36836,36837,36838,36839,36840,36841, -36841,36842,36843,36844,36845,36846,36847,36848,36849,36850,36851,36852,36853, -36854,36855,36855,36856,36857,36858,36859,36860,36861,36862,36863,36864,36865, -36866,36867,36868,36868,36869,36870,36871,36872,36873,36874,36875,36876,36877, -36878,36879,36880,36881,36881,36882,36883,36884,36885,36886,36887,36888,36889, -36890,36891,36892,36893,36894,36895,36895,36896,36897,36898,36899,36900,36901, -36902,36903,36904,36905,36906,36907,36908,36908,36909,36910,36911,36912,36913, -36914,36915,36916,36917,36918,36919,36920,36921,36921,36922,36923,36924,36925, -36926,36927,36928,36929,36930,36931,36932,36933,36934,36934,36935,36936,36937, -36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36947,36948,36949, -36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36960,36961, -36962,36963,36964,36965,36966,36967,36968,36969,36970,36971,36972,36972,36973, -36974,36975,36976,36977,36978,36979,36980,36981,36982,36983,36984,36985,36985, -36986,36987,36988,36989,36990,36991,36992,36993,36994,36995,36996,36997,36998, -36998,36999,37000,37001,37002,37003,37004,37005,37006,37007,37008,37009,37010, -37010,37011,37012,37013,37014,37015,37016,37017,37018,37019,37020,37021,37022, -37022,37023,37024,37025,37026,37027,37028,37029,37030,37031,37032,37033,37034, -37035,37035,37036,37037,37038,37039,37040,37041,37042,37043,37044,37045,37046, -37047,37047,37048,37049,37050,37051,37052,37053,37054,37055,37056,37057,37058, -37059,37059,37060,37061,37062,37063,37064,37065,37066,37067,37068,37069,37070, -37071,37072,37072,37073,37074,37075,37076,37077,37078,37079,37080,37081,37082, -37083,37084,37084,37085,37086,37087,37088,37089,37090,37091,37092,37093,37094, -37095,37096,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105,37106, -37107,37108,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117,37118, -37119,37120,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129,37130, -37131,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142, -37143,37143,37144,37145,37146,37147,37148,37149,37150,37151,37152,37153,37154, -37155,37155,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166, -37167,37167,37168,37169,37170,37171,37172,37173,37174,37175,37176,37177,37178, -37178,37179,37180,37181,37182,37183,37184,37185,37186,37187,37188,37189,37190, -37190,37191,37192,37193,37194,37195,37196,37197,37198,37199,37200,37201,37201, -37202,37203,37204,37205,37206,37207,37208,37209,37210,37211,37212,37213,37213, -37214,37215,37216,37217,37218,37219,37220,37221,37222,37223,37224,37224,37225, -37226,37227,37228,37229,37230,37231,37232,37233,37234,37235,37235,37236,37237, -37238,37239,37240,37241,37242,37243,37244,37245,37246,37247,37247,37248,37249, -37250,37251,37252,37253,37254,37255,37256,37257,37258,37258,37259,37260,37261, -37262,37263,37264,37265,37266,37267,37268,37269,37269,37270,37271,37272,37273, -37274,37275,37276,37277,37278,37279,37280,37280,37281,37282,37283,37284,37285, -37286,37287,37288,37289,37290,37291,37291,37292,37293,37294,37295,37296,37297, -37298,37299,37300,37301,37302,37302,37303,37304,37305,37306,37307,37308,37309, -37310,37311,37312,37313,37313,37314,37315,37316,37317,37318,37319,37320,37321, -37322,37323,37324,37324,37325,37326,37327,37328,37329,37330,37331,37332,37333, -37334,37335,37335,37336,37337,37338,37339,37340,37341,37342,37343,37344,37345, -37346,37346,37347,37348,37349,37350,37351,37352,37353,37354,37355,37356,37356, -37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37367,37368, -37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37378,37379,37380, -37381,37382,37383,37384,37385,37386,37387,37388,37388,37389,37390,37391,37392, -37393,37394,37395,37396,37397,37398,37399,37399,37400,37401,37402,37403,37404, -37405,37406,37407,37408,37409,37410,37410,37411,37412,37413,37414,37415,37416, -37417,37418,37419,37420,37420,37421,37422,37423,37424,37425,37426,37427,37428, -37429,37430,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440, -37441,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37451, -37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37462,37463, -37464,37465,37466,37467,37468,37469,37470,37471,37472,37472,37473,37474,37475, -37476,37477,37478,37479,37480,37481,37482,37482,37483,37484,37485,37486,37487, -37488,37489,37490,37491,37492,37492,37493,37494,37495,37496,37497,37498,37499, -37500,37501,37502,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511, -37512,37513,37513,37514,37515,37516,37517,37518,37519,37520,37521,37522,37523, -37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37533,37534, -37535,37536,37537,37538,37539,37540,37541,37542,37543,37543,37544,37545,37546, -37547,37548,37549,37550,37551,37552,37553,37553,37554,37555,37556,37557,37558, -37559,37560,37561,37562,37563,37563,37564,37565,37566,37567,37568,37569,37570, -37571,37572,37573,37573,37574,37575,37576,37577,37578,37579,37580,37581,37582, -37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37592,37593, -37594,37595,37596,37597,37598,37599,37600,37601,37602,37602,37603,37604,37605, -37606,37607,37608,37609,37610,37611,37612,37612,37613,37614,37615,37616,37617, -37618,37619,37620,37621,37622,37622,37623,37624,37625,37626,37627,37628,37629, -37630,37631,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641, -37641,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37651,37652, -37653,37654,37655,37656,37657,37658,37659,37660,37660,37661,37662,37663,37664, -37665,37666,37667,37668,37669,37670,37670,37671,37672,37673,37674,37675,37676, -37677,37678,37679,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688, -37689,37689,37690,37691,37692,37693,37694,37695,37696,37697,37698,37698,37699, -37700,37701,37702,37703,37704,37705,37706,37707,37708,37708,37709,37710,37711, -37712,37713,37714,37715,37716,37717,37717,37718,37719,37720,37721,37722,37723, -37724,37725,37726,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735, -37736,37736,37737,37738,37739,37740,37741,37742,37743,37744,37745,37745,37746, -37747,37748,37749,37750,37751,37752,37753,37754,37754,37755,37756,37757,37758, -37759,37760,37761,37762,37763,37764,37764,37765,37766,37767,37768,37769,37770, -37771,37772,37773,37773,37774,37775,37776,37777,37778,37779,37780,37781,37782, -37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37791,37792,37793, -37794,37795,37796,37797,37798,37799,37800,37800,37801,37802,37803,37804,37805, -37806,37807,37808,37809,37809,37810,37811,37812,37813,37814,37815,37816,37817, -37818,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37827,37828, -37829,37830,37831,37832,37833,37834,37835,37836,37836,37837,37838,37839,37840, -37841,37842,37843,37844,37845,37845,37846,37847,37848,37849,37850,37851,37852, -37853,37854,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37863, -37864,37865,37866,37867,37868,37869,37870,37871,37872,37872,37873,37874,37875, -37876,37877,37878,37879,37880,37881,37881,37882,37883,37884,37885,37886,37887, -37888,37889,37890,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899, -37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37908,37909,37910, -37911,37912,37913,37914,37915,37916,37916,37917,37918,37919,37920,37921,37922, -37923,37924,37925,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934, -37934,37935,37936,37937,37938,37939,37940,37941,37942,37943,37943,37944,37945, -37946,37947,37948,37949,37950,37951,37951,37952,37953,37954,37955,37956,37957, -37958,37959,37960,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969, -37969,37970,37971,37972,37973,37974,37975,37976,37977,37977,37978,37979,37980, -37981,37982,37983,37984,37985,37986,37986,37987,37988,37989,37990,37991,37992, -37993,37994,37994,37995,37996,37997,37998,37999,38000,38001,38002,38003,38003, -38004,38005,38006,38007,38008,38009,38010,38011,38011,38012,38013,38014,38015, -38016,38017,38018,38019,38020,38020,38021,38022,38023,38024,38025,38026,38027, -38028,38028,38029,38030,38031,38032,38033,38034,38035,38036,38037,38037,38038, -38039,38040,38041,38042,38043,38044,38045,38045,38046,38047,38048,38049,38050, -38051,38052,38053,38054,38054,38055,38056,38057,38058,38059,38060,38061,38062, -38062,38063,38064,38065,38066,38067,38068,38069,38070,38070,38071,38072,38073, -38074,38075,38076,38077,38078,38079,38079,38080,38081,38082,38083,38084,38085, -38086,38087,38087,38088,38089,38090,38091,38092,38093,38094,38095,38095,38096, -38097,38098,38099,38100,38101,38102,38103,38103,38104,38105,38106,38107,38108, -38109,38110,38111,38112,38112,38113,38114,38115,38116,38117,38118,38119,38120, -38120,38121,38122,38123,38124,38125,38126,38127,38128,38128,38129,38130,38131, -38132,38133,38134,38135,38136,38136,38137,38138,38139,38140,38141,38142,38143, -38144,38144,38145,38146,38147,38148,38149,38150,38151,38152,38153,38153,38154, -38155,38156,38157,38158,38159,38160,38161,38161,38162,38163,38164,38165,38166, -38167,38168,38169,38169,38170,38171,38172,38173,38174,38175,38176,38177,38177, -38178,38179,38180,38181,38182,38183,38184,38185,38185,38186,38187,38188,38189, -38190,38191,38192,38193,38193,38194,38195,38196,38197,38198,38199,38200,38201, -38201,38202,38203,38204,38205,38206,38207,38208,38209,38209,38210,38211,38212, -38213,38214,38215,38216,38217,38217,38218,38219,38220,38221,38222,38223,38224, -38225,38225,38226,38227,38228,38229,38230,38231,38232,38233,38233,38234,38235, -38236,38237,38238,38239,38240,38241,38241,38242,38243,38244,38245,38246,38247, -38248,38249,38249,38250,38251,38252,38253,38254,38255,38256,38257,38257,38258, -38259,38260,38261,38262,38263,38264,38265,38265,38266,38267,38268,38269,38270, -38271,38272,38272,38273,38274,38275,38276,38277,38278,38279,38280,38280,38281, -38282,38283,38284,38285,38286,38287,38288,38288,38289,38290,38291,38292,38293, -38294,38295,38296,38296,38297,38298,38299,38300,38301,38302,38303,38304,38304, -38305,38306,38307,38308,38309,38310,38311,38311,38312,38313,38314,38315,38316, -38317,38318,38319,38319,38320,38321,38322,38323,38324,38325,38326,38327,38327, -38328,38329,38330,38331,38332,38333,38334,38335,38335,38336,38337,38338,38339, -38340,38341,38342,38342,38343,38344,38345,38346,38347,38348,38349,38350,38350, -38351,38352,38353,38354,38355,38356,38357,38358,38358,38359,38360,38361,38362, -38363,38364,38365,38365,38366,38367,38368,38369,38370,38371,38372,38373,38373, -38374,38375,38376,38377,38378,38379,38380,38381,38381,38382,38383,38384,38385, -38386,38387,38388,38388,38389,38390,38391,38392,38393,38394,38395,38396,38396, -38397,38398,38399,38400,38401,38402,38403,38403,38404,38405,38406,38407,38408, -38409,38410,38411,38411,38412,38413,38414,38415,38416,38417,38418,38418,38419, -38420,38421,38422,38423,38424,38425,38426,38426,38427,38428,38429,38430,38431, -38432,38433,38433,38434,38435,38436,38437,38438,38439,38440,38441,38441,38442, -38443,38444,38445,38446,38447,38448,38448,38449,38450,38451,38452,38453,38454, -38455,38456,38456,38457,38458,38459,38460,38461,38462,38463,38463,38464,38465, -38466,38467,38468,38469,38470,38471,38471,38472,38473,38474,38475,38476,38477, -38478,38478,38479,38480,38481,38482,38483,38484,38485,38485,38486,38487,38488, -38489,38490,38491,38492,38493,38493,38494,38495,38496,38497,38498,38499,38500, -38500,38501,38502,38503,38504,38505,38506,38507,38507,38508,38509,38510,38511, -38512,38513,38514,38515,38515,38516,38517,38518,38519,38520,38521,38522,38522, -38523,38524,38525,38526,38527,38528,38529,38529,38530,38531,38532,38533,38534, -38535,38536,38537,38537,38538,38539,38540,38541,38542,38543,38544,38544,38545, -38546,38547,38548,38549,38550,38551,38551,38552,38553,38554,38555,38556,38557, -38558,38558,38559,38560,38561,38562,38563,38564,38565,38566,38566,38567,38568, -38569,38570,38571,38572,38573,38573,38574,38575,38576,38577,38578,38579,38580, -38580,38581,38582,38583,38584,38585,38586,38587,38587,38588,38589,38590,38591, -38592,38593,38594,38594,38595,38596,38597,38598,38599,38600,38601,38602,38602, -38603,38604,38605,38606,38607,38608,38609,38609,38610,38611,38612,38613,38614, -38615,38616,38616,38617,38618,38619,38620,38621,38622,38623,38623,38624,38625, -38626,38627,38628,38629,38630,38630,38631,38632,38633,38634,38635,38636,38637, -38637,38638,38639,38640,38641,38642,38643,38644,38644,38645,38646,38647,38648, -38649,38650,38651,38651,38652,38653,38654,38655,38656,38657,38658,38658,38659, -38660,38661,38662,38663,38664,38665,38665,38666,38667,38668,38669,38670,38671, -38672,38672,38673,38674,38675,38676,38677,38678,38679,38679,38680,38681,38682, -38683,38684,38685,38686,38686,38687,38688,38689,38690,38691,38692,38693,38693, -38694,38695,38696,38697,38698,38699,38700,38700,38701,38702,38703,38704,38705, -38706,38707,38707,38708,38709,38710,38711,38712,38713,38714,38714,38715,38716, -38717,38718,38719,38720,38721,38721,38722,38723,38724,38725,38726,38727,38728, -38728,38729,38730,38731,38732,38733,38734,38735,38735,38736,38737,38738,38739, -38740,38741,38742,38742,38743,38744,38745,38746,38747,38748,38749,38749,38750, -38751,38752,38753,38754,38755,38756,38756,38757,38758,38759,38760,38761,38762, -38762,38763,38764,38765,38766,38767,38768,38769,38769,38770,38771,38772,38773, -38774,38775,38776,38776,38777,38778,38779,38780,38781,38782,38783,38783,38784, -38785,38786,38787,38788,38789,38790,38790,38791,38792,38793,38794,38795,38796, -38797,38797,38798,38799,38800,38801,38802,38803,38803,38804,38805,38806,38807, -38808,38809,38810,38810,38811,38812,38813,38814,38815,38816,38817,38817,38818, -38819,38820,38821,38822,38823,38824,38824,38825,38826,38827,38828,38829,38830, -38830,38831,38832,38833,38834,38835,38836,38837,38837,38838,38839,38840,38841, -38842,38843,38844,38844,38845,38846,38847,38848,38849,38850,38850,38851,38852, -38853,38854,38855,38856,38857,38857,38858,38859,38860,38861,38862,38863,38864, -38864,38865,38866,38867,38868,38869,38870,38871,38871,38872,38873,38874,38875, -38876,38877,38877,38878,38879,38880,38881,38882,38883,38884,38884,38885,38886, -38887,38888,38889,38890,38890,38891,38892,38893,38894,38895,38896,38897,38897, -38898,38899,38900,38901,38902,38903,38904,38904,38905,38906,38907,38908,38909, -38910,38910,38911,38912,38913,38914,38915,38916,38917,38917,38918,38919,38920, -38921,38922,38923,38923,38924,38925,38926,38927,38928,38929,38930,38930,38931, -38932,38933,38934,38935,38936,38937,38937,38938,38939,38940,38941,38942,38943, -38943,38944,38945,38946,38947,38948,38949,38950,38950,38951,38952,38953,38954, -38955,38956,38956,38957,38958,38959,38960,38961,38962,38963,38963,38964,38965, -38966,38967,38968,38969,38969,38970,38971,38972,38973,38974,38975,38976,38976, -38977,38978,38979,38980,38981,38982,38982,38983,38984,38985,38986,38987,38988, -38989,38989,38990,38991,38992,38993,38994,38995,38995,38996,38997,38998,38999, -39000,39001,39002,39002,39003,39004,39005,39006,39007,39008,39008,39009,39010, -39011,39012,39013,39014,39014,39015,39016,39017,39018,39019,39020,39021,39021, -39022,39023,39024,39025,39026,39027,39027,39028,39029,39030,39031,39032,39033, -39034,39034,39035,39036,39037,39038,39039,39040,39040,39041,39042,39043,39044, -39045,39046,39046,39047,39048,39049,39050,39051,39052,39053,39053,39054,39055, -39056,39057,39058,39059,39059,39060,39061,39062,39063,39064,39065,39066,39066, -39067,39068,39069,39070,39071,39072,39072,39073,39074,39075,39076,39077,39078, -39078,39079,39080,39081,39082,39083,39084,39085,39085,39086,39087,39088,39089, -39090,39091,39091,39092,39093,39094,39095,39096,39097,39097,39098,39099,39100, -39101,39102,39103,39104,39104,39105,39106,39107,39108,39109,39110,39110,39111, -39112,39113,39114,39115,39116,39116,39117,39118,39119,39120,39121,39122,39122, -39123,39124,39125,39126,39127,39128,39129,39129,39130,39131,39132,39133,39134, -39135,39135,39136,39137,39138,39139,39140,39141,39141,39142,39143,39144,39145, -39146,39147,39147,39148,39149,39150,39151,39152,39153,39154,39154,39155,39156, -39157,39158,39159,39160,39160,39161,39162,39163,39164,39165,39166,39166,39167, -39168,39169,39170,39171,39172,39172,39173,39174,39175,39176,39177,39178,39178, -39179,39180,39181,39182,39183,39184,39185,39185,39186,39187,39188,39189,39190, -39191,39191,39192,39193,39194,39195,39196,39197,39197,39198,39199,39200,39201, -39202,39203,39203,39204,39205,39206,39207,39208,39209,39209,39210,39211,39212, -39213,39214,39215,39215,39216,39217,39218,39219,39220,39221,39221,39222,39223, -39224,39225,39226,39227,39228,39228,39229,39230,39231,39232,39233,39234,39234, -39235,39236,39237,39238,39239,39240,39240,39241,39242,39243,39244,39245,39246, -39246,39247,39248,39249,39250,39251,39252,39252,39253,39254,39255,39256,39257, -39258,39258,39259,39260,39261,39262,39263,39264,39264,39265,39266,39267,39268, -39269,39270,39270,39271,39272,39273,39274,39275,39276,39276,39277,39278,39279, -39280,39281,39282,39282,39283,39284,39285,39286,39287,39288,39288,39289,39290, -39291,39292,39293,39294,39294,39295,39296,39297,39298,39299,39300,39300,39301, -39302,39303,39304,39305,39306,39306,39307,39308,39309,39310,39311,39312,39312, -39313,39314,39315,39316,39317,39318,39318,39319,39320,39321,39322,39323,39324, -39324,39325,39326,39327,39328,39329,39330,39330,39331,39332,39333,39334,39335, -39336,39336,39337,39338,39339,39340,39341,39342,39342,39343,39344,39345,39346, -39347,39348,39348,39349,39350,39351,39352,39353,39354,39354,39355,39356,39357, -39358,39359,39360,39360,39361,39362,39363,39364,39365,39366,39366,39367,39368, -39369,39370,39371,39372,39372,39373,39374,39375,39376,39377,39378,39378,39379, -39380,39381,39382,39383,39384,39384,39385,39386,39387,39388,39389,39389,39390, -39391,39392,39393,39394,39395,39395,39396,39397,39398,39399,39400,39401,39401, -39402,39403,39404,39405,39406,39407,39407,39408,39409,39410,39411,39412,39413, -39413,39414,39415,39416,39417,39418,39419,39419,39420,39421,39422,39423,39424, -39425,39425,39426,39427,39428,39429,39430,39430,39431,39432,39433,39434,39435, -39436,39436,39437,39438,39439,39440,39441,39442,39442,39443,39444,39445,39446, -39447,39448,39448,39449,39450,39451,39452,39453,39454,39454,39455,39456,39457, -39458,39459,39460,39460,39461,39462,39463,39464,39465,39465,39466,39467,39468, -39469,39470,39471,39471,39472,39473,39474,39475,39476,39477,39477,39478,39479, -39480,39481,39482,39483,39483,39484,39485,39486,39487,39488,39488,39489,39490, -39491,39492,39493,39494,39494,39495,39496,39497,39498,39499,39500,39500,39501, -39502,39503,39504,39505,39506,39506,39507,39508,39509,39510,39511,39511,39512, -39513,39514,39515,39516,39517,39517,39518,39519,39520,39521,39522,39523,39523, -39524,39525,39526,39527,39528,39529,39529,39530,39531,39532,39533,39534,39534, -39535,39536,39537,39538,39539,39540,39540,39541,39542,39543,39544,39545,39546, -39546,39547,39548,39549,39550,39551,39551,39552,39553,39554,39555,39556,39557, -39557,39558,39559,39560,39561,39562,39563,39563,39564,39565,39566,39567,39568, -39568,39569,39570,39571,39572,39573,39574,39574,39575,39576,39577,39578,39579, -39580,39580,39581,39582,39583,39584,39585,39585,39586,39587,39588,39589,39590, -39591,39591,39592,39593,39594,39595,39596,39597,39597,39598,39599,39600,39601, -39602,39602,39603,39604,39605,39606,39607,39608,39608,39609,39610,39611,39612, -39613,39613,39614,39615,39616,39617,39618,39619,39619,39620,39621,39622,39623, -39624,39625,39625,39626,39627,39628,39629,39630,39630,39631,39632,39633,39634, -39635,39636,39636,39637,39638,39639,39640,39641,39641,39642,39643,39644,39645, -39646,39647,39647,39648,39649,39650,39651,39652,39653,39653,39654,39655,39656, -39657,39658,39658,39659,39660,39661,39662,39663,39664,39664,39665,39666,39667, -39668,39669,39669,39670,39671,39672,39673,39674,39675,39675,39676,39677,39678, -39679,39680,39680,39681,39682,39683,39684,39685,39686,39686,39687,39688,39689, -39690,39691,39691,39692,39693,39694,39695,39696,39697,39697,39698,39699,39700, -39701,39702,39702,39703,39704,39705,39706,39707,39708,39708,39709,39710,39711, -39712,39713,39713,39714,39715,39716,39717,39718,39719,39719,39720,39721,39722, -39723,39724,39724,39725,39726,39727,39728,39729,39730,39730,39731,39732,39733, -39734,39735,39735,39736,39737,39738,39739,39740,39741,39741,39742,39743,39744, -39745,39746,39746,39747,39748,39749,39750,39751,39752,39752,39753,39754,39755, -39756,39757,39757,39758,39759,39760,39761,39762,39762,39763,39764,39765,39766, -39767,39768,39768,39769,39770,39771,39772,39773,39773,39774,39775,39776,39777, -39778,39779,39779,39780,39781,39782,39783,39784,39784,39785,39786,39787,39788, -39789,39790,39790,39791,39792,39793,39794,39795,39795,39796,39797,39798,39799, -39800,39800,39801,39802,39803,39804,39805,39806,39806,39807,39808,39809,39810, -39811,39811,39812,39813,39814,39815,39816,39817,39817,39818,39819,39820,39821, -39822,39822,39823,39824,39825,39826,39827,39827,39828,39829,39830,39831,39832, -39833,39833,39834,39835,39836,39837,39838,39838,39839,39840,39841,39842,39843, -39843,39844,39845,39846,39847,39848,39849,39849,39850,39851,39852,39853,39854, -39854,39855,39856,39857,39858,39859,39859,39860,39861,39862,39863,39864,39865, -39865,39866,39867,39868,39869,39870,39870,39871,39872,39873,39874,39875,39875, -39876,39877,39878,39879,39880,39881,39881,39882,39883,39884,39885,39886,39886, -39887,39888,39889,39890,39891,39891,39892,39893,39894,39895,39896,39896,39897, -39898,39899,39900,39901,39902,39902,39903,39904,39905,39906,39907,39907,39908, -39909,39910,39911,39912,39912,39913,39914,39915,39916,39917,39918,39918,39919, -39920,39921,39922,39923,39923,39924,39925,39926,39927,39928,39928,39929,39930, -39931,39932,39933,39933,39934,39935,39936,39937,39938,39939,39939,39940,39941, -39942,39943,39944,39944,39945,39946,39947,39948,39949,39949,39950,39951,39952, -39953,39954,39954,39955,39956,39957,39958,39959,39959,39960,39961,39962,39963, -39964,39965,39965,39966,39967,39968,39969,39970,39970,39971,39972,39973,39974, -39975,39975,39976,39977,39978,39979,39980,39980,39981,39982,39983,39984,39985, -39986,39986,39987,39988,39989,39990,39991,39991,39992,39993,39994,39995,39996, -39996,39997,39998,39999,40000,40001,40001,40002,40003,40004,40005,40006,40006, -40007,40008,40009,40010,40011,40011,40012,40013,40014,40015,40016,40017,40017, -40018,40019,40020,40021,40022,40022,40023,40024,40025,40026,40027,40027,40028, -40029,40030,40031,40032,40032,40033,40034,40035,40036,40037,40037,40038,40039, -40040,40041,40042,40042,40043,40044,40045,40046,40047,40047,40048,40049,40050, -40051,40052,40053,40053,40054,40055,40056,40057,40058,40058,40059,40060,40061, -40062,40063,40063,40064,40065,40066,40067,40068,40068,40069,40070,40071,40072, -40073,40073,40074,40075,40076,40077,40078,40078,40079,40080,40081,40082,40083, -40083,40084,40085,40086,40087,40088,40088,40089,40090,40091,40092,40093,40093, -40094,40095,40096,40097,40098,40099,40099,40100,40101,40102,40103,40104,40104, -40105,40106,40107,40108,40109,40109,40110,40111,40112,40113,40114,40114,40115, -40116,40117,40118,40119,40119,40120,40121,40122,40123,40124,40124,40125,40126, -40127,40128,40129,40129,40130,40131,40132,40133,40134,40134,40135,40136,40137, -40138,40139,40139,40140,40141,40142,40143,40144,40144,40145,40146,40147,40148, -40149,40149,40150,40151,40152,40153,40154,40154,40155,40156,40157,40158,40159, -40159,40160,40161,40162,40163,40164,40164,40165,40166,40167,40168,40169,40169, -40170,40171,40172,40173,40174,40174,40175,40176,40177,40178,40179,40179,40180, -40181,40182,40183,40184,40184,40185,40186,40187,40188,40189,40189,40190,40191, -40192,40193,40194,40194,40195,40196,40197,40198,40199,40199,40200,40201,40202, -40203,40204,40204,40205,40206,40207,40208,40209,40209,40210,40211,40212,40213, -40214,40214,40215,40216,40217,40218,40219,40219,40220,40221,40222,40223,40224, -40224,40225,40226,40227,40228,40229,40229,40230,40231,40232,40233,40234,40234, -40235,40236,40237,40238,40239,40239,40240,40241,40242,40243,40244,40244,40245, -40246,40247,40248,40249,40249,40250,40251,40252,40253,40254,40254,40255,40256, -40257,40258,40259,40259,40260,40261,40262,40263,40263,40264,40265,40266,40267, -40268,40268,40269,40270,40271,40272,40273,40273,40274,40275,40276,40277,40278, -40278,40279,40280,40281,40282,40283,40283,40284,40285,40286,40287,40288,40288, -40289,40290,40291,40292,40293,40293,40294,40295,40296,40297,40298,40298,40299, -40300,40301,40302,40303,40303,40304,40305,40306,40307,40308,40308,40309,40310, -40311,40312,40312,40313,40314,40315,40316,40317,40317,40318,40319,40320,40321, -40322,40322,40323,40324,40325,40326,40327,40327,40328,40329,40330,40331,40332, -40332,40333,40334,40335,40336,40337,40337,40338,40339,40340,40341,40342,40342, -40343,40344,40345,40346,40346,40347,40348,40349,40350,40351,40351,40352,40353, -40354,40355,40356,40356,40357,40358,40359,40360,40361,40361,40362,40363,40364, -40365,40366,40366,40367,40368,40369,40370,40371,40371,40372,40373,40374,40375, -40375,40376,40377,40378,40379,40380,40380,40381,40382,40383,40384,40385,40385, -40386,40387,40388,40389,40390,40390,40391,40392,40393,40394,40395,40395,40396, -40397,40398,40399,40399,40400,40401,40402,40403,40404,40404,40405,40406,40407, -40408,40409,40409,40410,40411,40412,40413,40414,40414,40415,40416,40417,40418, -40419,40419,40420,40421,40422,40423,40423,40424,40425,40426,40427,40428,40428, -40429,40430,40431,40432,40433,40433,40434,40435,40436,40437,40438,40438,40439, -40440,40441,40442,40442,40443,40444,40445,40446,40447,40447,40448,40449,40450, -40451,40452,40452,40453,40454,40455,40456,40457,40457,40458,40459,40460,40461, -40461,40462,40463,40464,40465,40466,40466,40467,40468,40469,40470,40471,40471, -40472,40473,40474,40475,40476,40476,40477,40478,40479,40480,40480,40481,40482, -40483,40484,40485,40485,40486,40487,40488,40489,40490,40490,40491,40492,40493, -40494,40495,40495,40496,40497,40498,40499,40499,40500,40501,40502,40503,40504, -40504,40505,40506,40507,40508,40509,40509,40510,40511,40512,40513,40513,40514, -40515,40516,40517,40518,40518,40519,40520,40521,40522,40523,40523,40524,40525, -40526,40527,40527,40528,40529,40530,40531,40532,40532,40533,40534,40535,40536, -40537,40537,40538,40539,40540,40541,40542,40542,40543,40544,40545,40546,40546, -40547,40548,40549,40550,40551,40551,40552,40553,40554,40555,40556,40556,40557, -40558,40559,40560,40560,40561,40562,40563,40564,40565,40565,40566,40567,40568, -40569,40569,40570,40571,40572,40573,40574,40574,40575,40576,40577,40578,40579, -40579,40580,40581,40582,40583,40583,40584,40585,40586,40587,40588,40588,40589, -40590,40591,40592,40593,40593,40594,40595,40596,40597,40597,40598,40599,40600, -40601,40602,40602,40603,40604,40605,40606,40607,40607,40608,40609,40610,40611, -40611,40612,40613,40614,40615,40616,40616,40617,40618,40619,40620,40620,40621, -40622,40623,40624,40625,40625,40626,40627,40628,40629,40630,40630,40631,40632, -40633,40634,40634,40635,40636,40637,40638,40639,40639,40640,40641,40642,40643, -40643,40644,40645,40646,40647,40648,40648,40649,40650,40651,40652,40653,40653, -40654,40655,40656,40657,40657,40658,40659,40660,40661,40662,40662,40663,40664, -40665,40666,40666,40667,40668,40669,40670,40671,40671,40672,40673,40674,40675, -40675,40676,40677,40678,40679,40680,40680,40681,40682,40683,40684,40685,40685, -40686,40687,40688,40689,40689,40690,40691,40692,40693,40694,40694,40695,40696, -40697,40698,40698,40699,40700,40701,40702,40703,40703,40704,40705,40706,40707, -40707,40708,40709,40710,40711,40712,40712,40713,40714,40715,40716,40716,40717, -40718,40719,40720,40721,40721,40722,40723,40724,40725,40725,40726,40727,40728, -40729,40730,40730,40731,40732,40733,40734,40735,40735,40736,40737,40738,40739, -40739,40740,40741,40742,40743,40744,40744,40745,40746,40747,40748,40748,40749, -40750,40751,40752,40753,40753,40754,40755,40756,40757,40757,40758,40759,40760, -40761,40762,40762,40763,40764,40765,40766,40766,40767,40768,40769,40770,40771, -40771,40772,40773,40774,40775,40775,40776,40777,40778,40779,40780,40780,40781, -40782,40783,40784,40784,40785,40786,40787,40788,40788,40789,40790,40791,40792, -40793,40793,40794,40795,40796,40797,40797,40798,40799,40800,40801,40802,40802, -40803,40804,40805,40806,40806,40807,40808,40809,40810,40811,40811,40812,40813, -40814,40815,40815,40816,40817,40818,40819,40820,40820,40821,40822,40823,40824, -40824,40825,40826,40827,40828,40829,40829,40830,40831,40832,40833,40833,40834, -40835,40836,40837,40837,40838,40839,40840,40841,40842,40842,40843,40844,40845, -40846,40846,40847,40848,40849,40850,40851,40851,40852,40853,40854,40855,40855, -40856,40857,40858,40859,40860,40860,40861,40862,40863,40864,40864,40865,40866, -40867,40868,40868,40869,40870,40871,40872,40873,40873,40874,40875,40876,40877, -40877,40878,40879,40880,40881,40882,40882,40883,40884,40885,40886,40886,40887, -40888,40889,40890,40890,40891,40892,40893,40894,40895,40895,40896,40897,40898, -40899,40899,40900,40901,40902,40903,40904,40904,40905,40906,40907,40908,40908, -40909,40910,40911,40912,40912,40913,40914,40915,40916,40917,40917,40918,40919, -40920,40921,40921,40922,40923,40924,40925,40926,40926,40927,40928,40929,40930, -40930,40931,40932,40933,40934,40934,40935,40936,40937,40938,40939,40939,40940, -40941,40942,40943,40943,40944,40945,40946,40947,40947,40948,40949,40950,40951, -40952,40952,40953,40954,40955,40956,40956,40957,40958,40959,40960,40960,40961, -40962,40963,40964,40965,40965,40966,40967,40968,40969,40969,40970,40971,40972, -40973,40973,40974,40975,40976,40977,40978,40978,40979,40980,40981,40982,40982, -40983,40984,40985,40986,40986,40987,40988,40989,40990,40991,40991,40992,40993, -40994,40995,40995,40996,40997,40998,40999,40999,41000,41001,41002,41003,41004, -41004,41005,41006,41007,41008,41008,41009,41010,41011,41012,41012,41013,41014, -41015,41016,41017,41017,41018,41019,41020,41021,41021,41022,41023,41024,41025, -41025,41026,41027,41028,41029,41030,41030,41031,41032,41033,41034,41034,41035, -41036,41037,41038,41038,41039,41040,41041,41042,41042,41043,41044,41045,41046, -41047,41047,41048,41049,41050,41051,41051,41052,41053,41054,41055,41055,41056, -41057,41058,41059,41060,41060,41061,41062,41063,41064,41064,41065,41066,41067, -41068,41068,41069,41070,41071,41072,41072,41073,41074,41075,41076,41077,41077, -41078,41079,41080,41081,41081,41082,41083,41084,41085,41085,41086,41087,41088, -41089,41089,41090,41091,41092,41093,41094,41094,41095,41096,41097,41098,41098, -41099,41100,41101,41102,41102,41103,41104,41105,41106,41106,41107,41108,41109, -41110,41111,41111,41112,41113,41114,41115,41115,41116,41117,41118,41119,41119, -41120,41121,41122,41123,41123,41124,41125,41126,41127,41128,41128,41129,41130, -41131,41132,41132,41133,41134,41135,41136,41136,41137,41138,41139,41140,41140, -41141,41142,41143,41144,41145,41145,41146,41147,41148,41149,41149,41150,41151, -41152,41153,41153,41154,41155,41156,41157,41157,41158,41159,41160,41161,41161, -41162,41163,41164,41165,41166,41166,41167,41168,41169,41170,41170,41171,41172, -41173,41174,41174,41175,41176,41177,41178,41178,41179,41180,41181,41182,41182, -41183,41184,41185,41186,41187,41187,41188,41189,41190,41191,41191,41192,41193, -41194,41195,41195,41196,41197,41198,41199,41199,41200,41201,41202,41203,41203, -41204,41205,41206,41207,41207,41208,41209,41210,41211,41212,41212,41213,41214, -41215,41216,41216,41217,41218,41219,41220,41220,41221,41222,41223,41224,41224, -41225,41226,41227,41228,41228,41229,41230,41231,41232,41232,41233,41234,41235, -41236,41237,41237,41238,41239,41240,41241,41241,41242,41243,41244,41245,41245, -41246,41247,41248,41249,41249,41250,41251,41252,41253,41253,41254,41255,41256, -41257,41257,41258,41259,41260,41261,41261,41262,41263,41264,41265,41266,41266, -41267,41268,41269,41270,41270,41271,41272,41273,41274,41274,41275,41276,41277, -41278,41278,41279,41280,41281,41282,41282,41283,41284,41285,41286,41286,41287, -41288,41289,41290,41290,41291,41292,41293,41294,41294,41295,41296,41297,41298, -41299,41299,41300,41301,41302,41303,41303,41304,41305,41306,41307,41307,41308, -41309,41310,41311,41311,41312,41313,41314,41315,41315,41316,41317,41318,41319, -41319,41320,41321,41322,41323,41323,41324,41325,41326,41327,41327,41328,41329, -41330,41331,41331,41332,41333,41334,41335,41335,41336,41337,41338,41339,41340, -41340,41341,41342,41343,41344,41344,41345,41346,41347,41348,41348,41349,41350, -41351,41352,41352,41353,41354,41355,41356,41356,41357,41358,41359,41360,41360, -41361,41362,41363,41364,41364,41365,41366,41367,41368,41368,41369,41370,41371, -41372,41372,41373,41374,41375,41376,41376,41377,41378,41379,41380,41380,41381, -41382,41383,41384,41384,41385,41386,41387,41388,41388,41389,41390,41391,41392, -41392,41393,41394,41395,41396,41396,41397,41398,41399,41400,41401,41401,41402, -41403,41404,41405,41405,41406,41407,41408,41409,41409,41410,41411,41412,41413, -41413,41414,41415,41416,41417,41417,41418,41419,41420,41421,41421,41422,41423, -41424,41425,41425,41426,41427,41428,41429,41429,41430,41431,41432,41433,41433, -41434,41435,41436,41437,41437,41438,41439,41440,41441,41441,41442,41443,41444, -41445,41445,41446,41447,41448,41449,41449,41450,41451,41452,41453,41453,41454, -41455,41456,41457,41457,41458,41459,41460,41461,41461,41462,41463,41464,41465, -41465,41466,41467,41468,41469,41469,41470,41471,41472,41473,41473,41474,41475, -41476,41477,41477,41478,41479,41480,41481,41481,41482,41483,41484,41485,41485, -41486,41487,41488,41489,41489,41490,41491,41492,41493,41493,41494,41495,41496, -41497,41497,41498,41499,41500,41501,41501,41502,41503,41504,41505,41505,41506, -41507,41508,41509,41509,41510,41511,41512,41513,41513,41514,41515,41516,41517, -41517,41518,41519,41520,41521,41521,41522,41523,41524,41525,41525,41526,41527, -41528,41529,41529,41530,41531,41532,41533,41533,41534,41535,41536,41537,41537, -41538,41539,41540,41541,41541,41542,41543,41544,41545,41545,41546,41547,41548, -41549,41549,41550,41551,41552,41553,41553,41554,41555,41556,41556,41557,41558, -41559,41560,41560,41561,41562,41563,41564,41564,41565,41566,41567,41568,41568, -41569,41570,41571,41572,41572,41573,41574,41575,41576,41576,41577,41578,41579, -41580,41580,41581,41582,41583,41584,41584,41585,41586,41587,41588,41588,41589, -41590,41591,41592,41592,41593,41594,41595,41596,41596,41597,41598,41599,41600, -41600,41601,41602,41603,41604,41604,41605,41606,41607,41608,41608,41609,41610, -41611,41612,41612,41613,41614,41615,41615,41616,41617,41618,41619,41619,41620, -41621,41622,41623,41623,41624,41625,41626,41627,41627,41628,41629,41630,41631, -41631,41632,41633,41634,41635,41635,41636,41637,41638,41639,41639,41640,41641, -41642,41643,41643,41644,41645,41646,41647,41647,41648,41649,41650,41651,41651, -41652,41653,41654,41654,41655,41656,41657,41658,41658,41659,41660,41661,41662, -41662,41663,41664,41665,41666,41666,41667,41668,41669,41670,41670,41671,41672, -41673,41674,41674,41675,41676,41677,41678,41678,41679,41680,41681,41682,41682, -41683,41684,41685,41686,41686,41687,41688,41689,41689,41690,41691,41692,41693, -41693,41694,41695,41696,41697,41697,41698,41699,41700,41701,41701,41702,41703, -41704,41705,41705,41706,41707,41708,41709,41709,41710,41711,41712,41713,41713, -41714,41715,41716,41716,41717,41718,41719,41720,41720,41721,41722,41723,41724, -41724,41725,41726,41727,41728,41728,41729,41730,41731,41732,41732,41733,41734, -41735,41736,41736,41737,41738,41739,41740,41740,41741,41742,41743,41743,41744, -41745,41746,41747,41747,41748,41749,41750,41751,41751,41752,41753,41754,41755, -41755,41756,41757,41758,41759,41759,41760,41761,41762,41763,41763,41764,41765, -41766,41766,41767,41768,41769,41770,41770,41771,41772,41773,41774,41774,41775, -41776,41777,41778,41778,41779,41780,41781,41782,41782,41783,41784,41785,41785, -41786,41787,41788,41789,41789,41790,41791,41792,41793,41793,41794,41795,41796, -41797,41797,41798,41799,41800,41801,41801,41802,41803,41804,41805,41805,41806, -41807,41808,41808,41809,41810,41811,41812,41812,41813,41814,41815,41816,41816, -41817,41818,41819,41820,41820,41821,41822,41823,41824,41824,41825,41826,41827, -41827,41828,41829,41830,41831,41831,41832,41833,41834,41835,41835,41836,41837, -41838,41839,41839,41840,41841,41842,41842,41843,41844,41845,41846,41846,41847, -41848,41849,41850,41850,41851,41852,41853,41854,41854,41855,41856,41857,41858, -41858,41859,41860,41861,41861,41862,41863,41864,41865,41865,41866,41867,41868, -41869,41869,41870,41871,41872,41873,41873,41874,41875,41876,41876,41877,41878, -41879,41880,41880,41881,41882,41883,41884,41884,41885,41886,41887,41888,41888, -41889,41890,41891,41891,41892,41893,41894,41895,41895,41896,41897,41898,41899, -41899,41900,41901,41902,41903,41903,41904,41905,41906,41906,41907,41908,41909, -41910,41910,41911,41912,41913,41914,41914,41915,41916,41917,41918,41918,41919, -41920,41921,41921,41922,41923,41924,41925,41925,41926,41927,41928,41929,41929, -41930,41931,41932,41933,41933,41934,41935,41936,41936,41937,41938,41939,41940, -41940,41941,41942,41943,41944,41944,41945,41946,41947,41948,41948,41949,41950, -41951,41951,41952,41953,41954,41955,41955,41956,41957,41958,41959,41959,41960, -41961,41962,41962,41963,41964,41965,41966,41966,41967,41968,41969,41970,41970, -41971,41972,41973,41974,41974,41975,41976,41977,41977,41978,41979,41980,41981, -41981,41982,41983,41984,41985,41985,41986,41987,41988,41988,41989,41990,41991, -41992,41992,41993,41994,41995,41996,41996,41997,41998,41999,42000,42000,42001, -42002,42003,42003,42004,42005,42006,42007,42007,42008,42009,42010,42011,42011, -42012,42013,42014,42014,42015,42016,42017,42018,42018,42019,42020,42021,42022, -42022,42023,42024,42025,42025,42026,42027,42028,42029,42029,42030,42031,42032, -42033,42033,42034,42035,42036,42036,42037,42038,42039,42040,42040,42041,42042, -42043,42044,42044,42045,42046,42047,42047,42048,42049,42050,42051,42051,42052, -42053,42054,42055,42055,42056,42057,42058,42058,42059,42060,42061,42062,42062, -42063,42064,42065,42066,42066,42067,42068,42069,42069,42070,42071,42072,42073, -42073,42074,42075,42076,42077,42077,42078,42079,42080,42080,42081,42082,42083, -42084,42084,42085,42086,42087,42088,42088,42089,42090,42091,42091,42092,42093, -42094,42095,42095,42096,42097,42098,42099,42099,42100,42101,42102,42102,42103, -42104,42105,42106,42106,42107,42108,42109,42110,42110,42111,42112,42113,42113, -42114,42115,42116,42117,42117,42118,42119,42120,42121,42121,42122,42123,42124, -42124,42125,42126,42127,42128,42128,42129,42130,42131,42131,42132,42133,42134, -42135,42135,42136,42137,42138,42139,42139,42140,42141,42142,42142,42143,42144, -42145,42146,42146,42147,42148,42149,42150,42150,42151,42152,42153,42153,42154, -42155,42156,42157,42157,42158,42159,42160,42160,42161,42162,42163,42164,42164, -42165,42166,42167,42168,42168,42169,42170,42171,42171,42172,42173,42174,42175, -42175,42176,42177,42178,42178,42179,42180,42181,42182,42182,42183,42184,42185, -42186,42186,42187,42188,42189,42189,42190,42191,42192,42193,42193,42194,42195, -42196,42196,42197,42198,42199,42200,42200,42201,42202,42203,42204,42204,42205, -42206,42207,42207,42208,42209,42210,42211,42211,42212,42213,42214,42214,42215, -42216,42217,42218,42218,42219,42220,42221,42222,42222,42223,42224,42225,42225, -42226,42227,42228,42229,42229,42230,42231,42232,42232,42233,42234,42235,42236, -42236,42237,42238,42239,42239,42240,42241,42242,42243,42243,42244,42245,42246, -42247,42247,42248,42249,42250,42250,42251,42252,42253,42254,42254,42255,42256, -42257,42257,42258,42259,42260,42261,42261,42262,42263,42264,42264,42265,42266, -42267,42268,42268,42269,42270,42271,42272,42272,42273,42274,42275,42275,42276, -42277,42278,42279,42279,42280,42281,42282,42282,42283,42284,42285,42286,42286, -42287,42288,42289,42289,42290,42291,42292,42293,42293,42294,42295,42296,42296, -42297,42298,42299,42300,42300,42301,42302,42303,42304,42304,42305,42306,42307, -42307,42308,42309,42310,42311,42311,42312,42313,42314,42314,42315,42316,42317, -42318,42318,42319,42320,42321,42321,42322,42323,42324,42325,42325,42326,42327, -42328,42328,42329,42330,42331,42332,42332,42333,42334,42335,42335,42336,42337, -42338,42339,42339,42340,42341,42342,42342,42343,42344,42345,42346,42346,42347, -42348,42349,42349,42350,42351,42352,42353,42353,42354,42355,42356,42356,42357, -42358,42359,42360,42360,42361,42362,42363,42364,42364,42365,42366,42367,42367, -42368,42369,42370,42371,42371,42372,42373,42374,42374,42375,42376,42377,42378, -42378,42379,42380,42381,42381,42382,42383,42384,42385,42385,42386,42387,42388, -42388,42389,42390,42391,42392,42392,42393,42394,42395,42395,42396,42397,42398, -42399,42399,42400,42401,42402,42402,42403,42404,42405,42406,42406,42407,42408, -42409,42409,42410,42411,42412,42413,42413,42414,42415,42416,42416,42417,42418, -42419,42420,42420,42421,42422,42423,42423,42424,42425,42426,42426,42427,42428, -42429,42430,42430,42431,42432,42433,42433,42434,42435,42436,42437,42437,42438, -42439,42440,42440,42441,42442,42443,42444,42444,42445,42446,42447,42447,42448, -42449,42450,42451,42451,42452,42453,42454,42454,42455,42456,42457,42458,42458, -42459,42460,42461,42461,42462,42463,42464,42465,42465,42466,42467,42468,42468, -42469,42470,42471,42472,42472,42473,42474,42475,42475,42476,42477,42478,42479, -42479,42480,42481,42482,42482,42483,42484,42485,42485,42486,42487,42488,42489, -42489,42490,42491,42492,42492,42493,42494,42495,42496,42496,42497,42498,42499, -42499,42500,42501,42502,42503,42503,42504,42505,42506,42506,42507,42508,42509, -42510,42510,42511,42512,42513,42513,42514,42515,42516,42517,42517,42518,42519, -42520,42520,42521,42522,42523,42523,42524,42525,42526,42527,42527,42528,42529, -42530,42530,42531,42532,42533,42534,42534,42535,42536,42537,42537,42538,42539, -42540,42541,42541,42542,42543,42544,42544,42545,42546,42547,42547,42548,42549, -42550,42551,42551,42552,42553,42554,42554,42555,42556,42557,42558,42558,42559, -42560,42561,42561,42562,42563,42564,42565,42565,42566,42567,42568,42568,42569, -42570,42571,42571,42572,42573,42574,42575,42575,42576,42577,42578,42578,42579, -42580,42581,42582,42582,42583,42584,42585,42585,42586,42587,42588,42588,42589, -42590,42591,42592,42592,42593,42594,42595,42595,42596,42597,42598,42599,42599, -42600,42601,42602,42602,42603,42604,42605,42605,42606,42607,42608,42609,42609, -42610,42611,42612,42612,42613,42614,42615,42616,42616,42617,42618,42619,42619, -42620,42621,42622,42622,42623,42624,42625,42626,42626,42627,42628,42629,42629, -42630,42631,42632,42633,42633,42634,42635,42636,42636,42637,42638,42639,42639, -42640,42641,42642,42643,42643,42644,42645,42646,42646,42647,42648,42649,42650, -42650,42651,42652,42653,42653,42654,42655,42656,42656,42657,42658,42659,42660, -42660,42661,42662,42663,42663,42664,42665,42666,42666,42667,42668,42669,42670, -42670,42671,42672,42673,42673,42674,42675,42676,42677,42677,42678,42679,42680, -42680,42681,42682,42683,42683,42684,42685,42686,42687,42687,42688,42689,42690, -42690,42691,42692,42693,42693,42694,42695,42696,42697,42697,42698,42699,42700, -42700,42701,42702,42703,42703,42704,42705,42706,42707,42707,42708,42709,42710, -42710,42711,42712,42713,42713,42714,42715,42716,42717,42717,42718,42719,42720, -42720,42721,42722,42723,42724,42724,42725,42726,42727,42727,42728,42729,42730, -42730,42731,42732,42733,42734,42734,42735,42736,42737,42737,42738,42739,42740, -42740,42741,42742,42743,42744,42744,42745,42746,42747,42747,42748,42749,42750, -42750,42751,42752,42753,42754,42754,42755,42756,42757,42757,42758,42759,42760, -42760,42761,42762,42763,42764,42764,42765,42766,42767,42767,42768,42769,42770, -42770,42771,42772,42773,42774,42774,42775,42776,42777,42777,42778,42779,42780, -42780,42781,42782,42783,42784,42784,42785,42786,42787,42787,42788,42789,42790, -42790,42791,42792,42793,42793,42794,42795,42796,42797,42797,42798,42799,42800, -42800,42801,42802,42803,42803,42804,42805,42806,42807,42807,42808,42809,42810, -42810,42811,42812,42813,42813,42814,42815,42816,42817,42817,42818,42819,42820, -42820,42821,42822,42823,42823,42824,42825,42826,42827,42827,42828,42829,42830, -42830,42831,42832,42833,42833,42834,42835,42836,42836,42837,42838,42839,42840, -42840,42841,42842,42843,42843,42844,42845,42846,42846,42847,42848,42849,42850, -42850,42851,42852,42853,42853,42854,42855,42856,42856,42857,42858,42859,42860, -42860,42861,42862,42863,42863,42864,42865,42866,42866,42867,42868,42869,42869, -42870,42871,42872,42873,42873,42874,42875,42876,42876,42877,42878,42879,42879, -42880,42881,42882,42883,42883,42884,42885,42886,42886,42887,42888,42889,42889, -42890,42891,42892,42892,42893,42894,42895,42896,42896,42897,42898,42899,42899, -42900,42901,42902,42902,42903,42904,42905,42905,42906,42907,42908,42909,42909, -42910,42911,42912,42912,42913,42914,42915,42915,42916,42917,42918,42919,42919, -42920,42921,42922,42922,42923,42924,42925,42925,42926,42927,42928,42928,42929, -42930,42931,42932,42932,42933,42934,42935,42935,42936,42937,42938,42938,42939, -42940,42941,42941,42942,42943,42944,42945,42945,42946,42947,42948,42948,42949, -42950,42951,42951,42952,42953,42954,42954,42955,42956,42957,42958,42958,42959, -42960,42961,42961,42962,42963,42964,42964,42965,42966,42967,42967,42968,42969, -42970,42971,42971,42972,42973,42974,42974,42975,42976,42977,42977,42978,42979, -42980,42980,42981,42982,42983,42984,42984,42985,42986,42987,42987,42988,42989, -42990,42990,42991,42992,42993,42993,42994,42995,42996,42996,42997,42998,42999, -43000,43000,43001,43002,43003,43003,43004,43005,43006,43006,43007,43008,43009, -43009,43010,43011,43012,43013,43013,43014,43015,43016,43016,43017,43018,43019, -43019,43020,43021,43022,43022,43023,43024,43025,43025,43026,43027,43028,43029, -43029,43030,43031,43032,43032,43033,43034,43035,43035,43036,43037,43038,43038, -43039,43040,43041,43042,43042,43043,43044,43045,43045,43046,43047,43048,43048, -43049,43050,43051,43051,43052,43053,43054,43054,43055,43056,43057,43058,43058, -43059,43060,43061,43061,43062,43063,43064,43064,43065,43066,43067,43067,43068, -43069,43070,43070,43071,43072,43073,43074,43074,43075,43076,43077,43077,43078, -43079,43080,43080,43081,43082,43083,43083,43084,43085,43086,43086,43087,43088, -43089,43090,43090,43091,43092,43093,43093,43094,43095,43096,43096,43097,43098, -43099,43099,43100,43101,43102,43102,43103,43104,43105,43106,43106,43107,43108, -43109,43109,43110,43111,43112,43112,43113,43114,43115,43115,43116,43117,43118, -43118,43119,43120,43121,43121,43122,43123,43124,43125,43125,43126,43127,43128, -43128,43129,43130,43131,43131,43132,43133,43134,43134,43135,43136,43137,43137, -43138,43139,43140,43141,43141,43142,43143,43144,43144,43145,43146,43147,43147, -43148,43149,43150,43150,43151,43152,43153,43153,43154,43155,43156,43156,43157, -43158,43159,43160,43160,43161,43162,43163,43163,43164,43165,43166,43166,43167, -43168,43169,43169,43170,43171,43172,43172,43173,43174,43175,43175,43176,43177, -43178,43179,43179,43180,43181,43182,43182,43183,43184,43185,43185,43186,43187, -43188,43188,43189,43190,43191,43191,43192,43193,43194,43194,43195,43196,43197, -43197,43198,43199,43200,43201,43201,43202,43203,43204,43204,43205,43206,43207, -43207,43208,43209,43210,43210,43211,43212,43213,43213,43214,43215,43216,43216, -43217,43218,43219,43219,43220,43221,43222,43223,43223,43224,43225,43226,43226, -43227,43228,43229,43229,43230,43231,43232,43232,43233,43234,43235,43235,43236, -43237,43238,43238,43239,43240,43241,43241,43242,43243,43244,43245,43245,43246, -43247,43248,43248,43249,43250,43251,43251,43252,43253,43254,43254,43255,43256, -43257,43257,43258,43259,43260,43260,43261,43262,43263,43263,43264,43265,43266, -43266,43267,43268,43269,43270,43270,43271,43272,43273,43273,43274,43275,43276, -43276,43277,43278,43279,43279,43280,43281,43282,43282,43283,43284,43285,43285, -43286,43287,43288,43288,43289,43290,43291,43291,43292,43293,43294,43295,43295, -43296,43297,43298,43298,43299,43300,43301,43301,43302,43303,43304,43304,43305, -43306,43307,43307,43308,43309,43310,43310,43311,43312,43313,43313,43314,43315, -43316,43316,43317,43318,43319,43319,43320,43321,43322,43323,43323,43324,43325, -43326,43326,43327,43328,43329,43329,43330,43331,43332,43332,43333,43334,43335, -43335,43336,43337,43338,43338,43339,43340,43341,43341,43342,43343,43344,43344, -43345,43346,43347,43347,43348,43349,43350,43350,43351,43352,43353,43353,43354, -43355,43356,43357,43357,43358,43359,43360,43360,43361,43362,43363,43363,43364, -43365,43366,43366,43367,43368,43369,43369,43370,43371,43372,43372,43373,43374, -43375,43375,43376,43377,43378,43378,43379,43380,43381,43381,43382,43383,43384, -43384,43385,43386,43387,43387,43388,43389,43390,43390,43391,43392,43393,43394, -43394,43395,43396,43397,43397,43398,43399,43400,43400,43401,43402,43403,43403, -43404,43405,43406,43406,43407,43408,43409,43409,43410,43411,43412,43412,43413, -43414,43415,43415,43416,43417,43418,43418,43419,43420,43421,43421,43422,43423, -43424,43424,43425,43426,43427,43427,43428,43429,43430,43430,43431,43432,43433, -43433,43434,43435,43436,43437,43437,43438,43439,43440,43440,43441,43442,43443, -43443,43444,43445,43446,43446,43447,43448,43449,43449,43450,43451,43452,43452, -43453,43454,43455,43455,43456,43457,43458,43458,43459,43460,43461,43461,43462, -43463,43464,43464,43465,43466,43467,43467,43468,43469,43470,43470,43471,43472, -43473,43473,43474,43475,43476,43476,43477,43478,43479,43479,43480,43481,43482, -43482,43483,43484,43485,43485,43486,43487,43488,43488,43489,43490,43491,43491, -43492,43493,43494,43494,43495,43496,43497,43497,43498,43499,43500,43501,43501, -43502,43503,43504,43504,43505,43506,43507,43507,43508,43509,43510,43510,43511, -43512,43513,43513,43514,43515,43516,43516,43517,43518,43519,43519,43520,43521, -43522,43522,43523,43524,43525,43525,43526,43527,43528,43528,43529,43530,43531, -43531,43532,43533,43534,43534,43535,43536,43537,43537,43538,43539,43540,43540, -43541,43542,43543,43543,43544,43545,43546,43546,43547,43548,43549,43549,43550, -43551,43552,43552,43553,43554,43555,43555,43556,43557,43558,43558,43559,43560, -43561,43561,43562,43563,43564,43564,43565,43566,43567,43567,43568,43569,43570, -43570,43571,43572,43573,43573,43574,43575,43576,43576,43577,43578,43579,43579, -43580,43581,43582,43582,43583,43584,43585,43585,43586,43587,43588,43588,43589, -43590,43591,43591,43592,43593,43594,43594,43595,43596,43597,43597,43598,43599, -43600,43600,43601,43602,43603,43603,43604,43605,43606,43606,43607,43608,43609, -43609,43610,43611,43612,43612,43613,43614,43615,43615,43616,43617,43618,43618, -43619,43620,43621,43621,43622,43623,43624,43624,43625,43626,43627,43627,43628, -43629,43630,43630,43631,43632,43633,43633,43634,43635,43636,43636,43637,43638, -43639,43639,43640,43641,43642,43642,43643,43644,43645,43645,43646,43647,43648, -43648,43649,43650,43651,43651,43652,43653,43654,43654,43655,43656,43657,43657, -43658,43659,43660,43660,43661,43662,43663,43663,43664,43665,43666,43666,43667, -43668,43669,43669,43670,43671,43672,43672,43673,43674,43675,43675,43676,43677, -43678,43678,43679,43680,43681,43681,43682,43683,43684,43684,43685,43686,43687, -43687,43688,43689,43690,43690,43691,43692,43693,43693,43694,43695,43696,43696, -43697,43698,43699,43699,43700,43701,43702,43702,43703,43704,43705,43705,43706, -43707,43707,43708,43709,43710,43710,43711,43712,43713,43713,43714,43715,43716, -43716,43717,43718,43719,43719,43720,43721,43722,43722,43723,43724,43725,43725, -43726,43727,43728,43728,43729,43730,43731,43731,43732,43733,43734,43734,43735, -43736,43737,43737,43738,43739,43740,43740,43741,43742,43743,43743,43744,43745, -43746,43746,43747,43748,43749,43749,43750,43751,43752,43752,43753,43754,43755, -43755,43756,43757,43758,43758,43759,43760,43761,43761,43762,43763,43764,43764, -43765,43766,43767,43767,43768,43769,43769,43770,43771,43772,43772,43773,43774, -43775,43775,43776,43777,43778,43778,43779,43780,43781,43781,43782,43783,43784, -43784,43785,43786,43787,43787,43788,43789,43790,43790,43791,43792,43793,43793, -43794,43795,43796,43796,43797,43798,43799,43799,43800,43801,43802,43802,43803, -43804,43805,43805,43806,43807,43808,43808,43809,43810,43811,43811,43812,43813, -43813,43814,43815,43816,43816,43817,43818,43819,43819,43820,43821,43822,43822, -43823,43824,43825,43825,43826,43827,43828,43828,43829,43830,43831,43831,43832, -43833,43834,43834,43835,43836,43837,43837,43838,43839,43840,43840,43841,43842, -43843,43843,43844,43845,43846,43846,43847,43848,43849,43849,43850,43851,43851, -43852,43853,43854,43854,43855,43856,43857,43857,43858,43859,43860,43860,43861, -43862,43863,43863,43864,43865,43866,43866,43867,43868,43869,43869,43870,43871, -43872,43872,43873,43874,43875,43875,43876,43877,43878,43878,43879,43880,43881, -43881,43882,43883,43883,43884,43885,43886,43886,43887,43888,43889,43889,43890, -43891,43892,43892,43893,43894,43895,43895,43896,43897,43898,43898,43899,43900, -43901,43901,43902,43903,43904,43904,43905,43906,43907,43907,43908,43909,43910, -43910,43911,43912,43912,43913,43914,43915,43915,43916,43917,43918,43918,43919, -43920,43921,43921,43922,43923,43924,43924,43925,43926,43927,43927,43928,43929, -43930,43930,43931,43932,43933,43933,43934,43935,43936,43936,43937,43938,43938, -43939,43940,43941,43941,43942,43943,43944,43944,43945,43946,43947,43947,43948, -43949,43950,43950,43951,43952,43953,43953,43954,43955,43956,43956,43957,43958, -43959,43959,43960,43961,43961,43962,43963,43964,43964,43965,43966,43967,43967, -43968,43969,43970,43970,43971,43972,43973,43973,43974,43975,43976,43976,43977, -43978,43979,43979,43980,43981,43982,43982,43983,43984,43984,43985,43986,43987, -43987,43988,43989,43990,43990,43991,43992,43993,43993,43994,43995,43996,43996, -43997,43998,43999,43999,44000,44001,44002,44002,44003,44004,44004,44005,44006, -44007,44007,44008,44009,44010,44010,44011,44012,44013,44013,44014,44015,44016, -44016,44017,44018,44019,44019,44020,44021,44022,44022,44023,44024,44025,44025, -44026,44027,44027,44028,44029,44030,44030,44031,44032,44033,44033,44034,44035, -44036,44036,44037,44038,44039,44039,44040,44041,44042,44042,44043,44044,44044, -44045,44046,44047,44047,44048,44049,44050,44050,44051,44052,44053,44053,44054, -44055,44056,44056,44057,44058,44059,44059,44060,44061,44062,44062,44063,44064, -44064,44065,44066,44067,44067,44068,44069,44070,44070,44071,44072,44073,44073, -44074,44075,44076,44076,44077,44078,44079,44079,44080,44081,44081,44082,44083, -44084,44084,44085,44086,44087,44087,44088,44089,44090,44090,44091,44092,44093, -44093,44094,44095,44096,44096,44097,44098,44098,44099,44100,44101,44101,44102, -44103,44104,44104,44105,44106,44107,44107,44108,44109,44110,44110,44111,44112, -44113,44113,44114,44115,44115,44116,44117,44118,44118,44119,44120,44121,44121, -44122,44123,44124,44124,44125,44126,44127,44127,44128,44129,44130,44130,44131, -44132,44132,44133,44134,44135,44135,44136,44137,44138,44138,44139,44140,44141, -44141,44142,44143,44144,44144,44145,44146,44146,44147,44148,44149,44149,44150, -44151,44152,44152,44153,44154,44155,44155,44156,44157,44158,44158,44159,44160, -44161,44161,44162,44163,44163,44164,44165,44166,44166,44167,44168,44169,44169, -44170,44171,44172,44172,44173,44174,44175,44175,44176,44177,44177,44178,44179, -44180,44180,44181,44182,44183,44183,44184,44185,44186,44186,44187,44188,44189, -44189,44190,44191,44191,44192,44193,44194,44194,44195,44196,44197,44197,44198, -44199,44200,44200,44201,44202,44203,44203,44204,44205,44205,44206,44207,44208, -44208,44209,44210,44211,44211,44212,44213,44214,44214,44215,44216,44217,44217, -44218,44219,44219,44220,44221,44222,44222,44223,44224,44225,44225,44226,44227, -44228,44228,44229,44230,44231,44231,44232,44233,44233,44234,44235,44236,44236, -44237,44238,44239,44239,44240,44241,44242,44242,44243,44244,44245,44245,44246, -44247,44247,44248,44249,44250,44250,44251,44252,44253,44253,44254,44255,44256, -44256,44257,44258,44258,44259,44260,44261,44261,44262,44263,44264,44264,44265, -44266,44267,44267,44268,44269,44270,44270,44271,44272,44272,44273,44274,44275, -44275,44276,44277,44278,44278,44279,44280,44281,44281,44282,44283,44283,44284, -44285,44286,44286,44287,44288,44289,44289,44290,44291,44292,44292,44293,44294, -44295,44295,44296,44297,44297,44298,44299,44300,44300,44301,44302,44303,44303, -44304,44305,44306,44306,44307,44308,44308,44309,44310,44311,44311,44312,44313, -44314,44314,44315,44316,44317,44317,44318,44319,44319,44320,44321,44322,44322, -44323,44324,44325,44325,44326,44327,44328,44328,44329,44330,44331,44331,44332, -44333,44333,44334,44335,44336,44336,44337,44338,44339,44339,44340,44341,44342, -44342,44343,44344,44344,44345,44346,44347,44347,44348,44349,44350,44350,44351, -44352,44353,44353,44354,44355,44355,44356,44357,44358,44358,44359,44360,44361, -44361,44362,44363,44364,44364,44365,44366,44366,44367,44368,44369,44369,44370, -44371,44372,44372,44373,44374,44375,44375,44376,44377,44377,44378,44379,44380, -44380,44381,44382,44383,44383,44384,44385,44386,44386,44387,44388,44388,44389, -44390,44391,44391,44392,44393,44394,44394,44395,44396,44397,44397,44398,44399, -44399,44400,44401,44402,44402,44403,44404,44405,44405,44406,44407,44408,44408, -44409,44410,44410,44411,44412,44413,44413,44414,44415,44416,44416,44417,44418, -44418,44419,44420,44421,44421,44422,44423,44424,44424,44425,44426,44427,44427, -44428,44429,44429,44430,44431,44432,44432,44433,44434,44435,44435,44436,44437, -44438,44438,44439,44440,44440,44441,44442,44443,44443,44444,44445,44446,44446, -44447,44448,44448,44449,44450,44451,44451,44452,44453,44454,44454,44455,44456, -44457,44457,44458,44459,44459,44460,44461,44462,44462,44463,44464,44465,44465, -44466,44467,44468,44468,44469,44470,44470,44471,44472,44473,44473,44474,44475, -44476,44476,44477,44478,44478,44479,44480,44481,44481,44482,44483,44484,44484, -44485,44486,44487,44487,44488,44489,44489,44490,44491,44492,44492,44493,44494, -44495,44495,44496,44497,44497,44498,44499,44500,44500,44501,44502,44503,44503, -44504,44505,44506,44506,44507,44508,44508,44509,44510,44511,44511,44512,44513, -44514,44514,44515,44516,44516,44517,44518,44519,44519,44520,44521,44522,44522, -44523,44524,44524,44525,44526,44527,44527,44528,44529,44530,44530,44531,44532, -44533,44533,44534,44535,44535,44536,44537,44538,44538,44539,44540,44541,44541, -44542,44543,44543,44544,44545,44546,44546,44547,44548,44549,44549,44550,44551, -44551,44552,44553,44554,44554,44555,44556,44557,44557,44558,44559,44560,44560, -44561,44562,44562,44563,44564,44565,44565,44566,44567,44568,44568,44569,44570, -44570,44571,44572,44573,44573,44574,44575,44576,44576,44577,44578,44578,44579, -44580,44581,44581,44582,44583,44584,44584,44585,44586,44586,44587,44588,44589, -44589,44590,44591,44592,44592,44593,44594,44594,44595,44596,44597,44597,44598, -44599,44600,44600,44601,44602,44603,44603,44604,44605,44605,44606,44607,44608, -44608,44609,44610,44611,44611,44612,44613,44613,44614,44615,44616,44616,44617, -44618,44619,44619,44620,44621,44621,44622,44623,44624,44624,44625,44626,44627, -44627,44628,44629,44629,44630,44631,44632,44632,44633,44634,44635,44635,44636, -44637,44637,44638,44639,44640,44640,44641,44642,44643,44643,44644,44645,44645, -44646,44647,44648,44648,44649,44650,44651,44651,44652,44653,44653,44654,44655, -44656,44656,44657,44658,44659,44659,44660,44661,44661,44662,44663,44664,44664, -44665,44666,44667,44667,44668,44669,44669,44670,44671,44672,44672,44673,44674, -44675,44675,44676,44677,44677,44678,44679,44680,44680,44681,44682,44683,44683, -44684,44685,44685,44686,44687,44688,44688,44689,44690,44691,44691,44692,44693, -44693,44694,44695,44696,44696,44697,44698,44699,44699,44700,44701,44701,44702, -44703,44704,44704,44705,44706,44706,44707,44708,44709,44709,44710,44711,44712, -44712,44713,44714,44714,44715,44716,44717,44717,44718,44719,44720,44720,44721, -44722,44722,44723,44724,44725,44725,44726,44727,44728,44728,44729,44730,44730, -44731,44732,44733,44733,44734,44735,44736,44736,44737,44738,44738,44739,44740, -44741,44741,44742,44743,44744,44744,44745,44746,44746,44747,44748,44749,44749, -44750,44751,44751,44752,44753,44754,44754,44755,44756,44757,44757,44758,44759, -44759,44760,44761,44762,44762,44763,44764,44765,44765,44766,44767,44767,44768, -44769,44770,44770,44771,44772,44773,44773,44774,44775,44775,44776,44777,44778, -44778,44779,44780,44780,44781,44782,44783,44783,44784,44785,44786,44786,44787, -44788,44788,44789,44790,44791,44791,44792,44793,44794,44794,44795,44796,44796, -44797,44798,44799,44799,44800,44801,44801,44802,44803,44804,44804,44805,44806, -44807,44807,44808,44809,44809,44810,44811,44812,44812,44813,44814,44815,44815, -44816,44817,44817,44818,44819,44820,44820,44821,44822,44822,44823,44824,44825, -44825,44826,44827,44828,44828,44829,44830,44830,44831,44832,44833,44833,44834, -44835,44835,44836,44837,44838,44838,44839,44840,44841,44841,44842,44843,44843, -44844,44845,44846,44846,44847,44848,44849,44849,44850,44851,44851,44852,44853, -44854,44854,44855,44856,44856,44857,44858,44859,44859,44860,44861,44862,44862, -44863,44864,44864,44865,44866,44867,44867,44868,44869,44869,44870,44871,44872, -44872,44873,44874,44875,44875,44876,44877,44877,44878,44879,44880,44880,44881, -44882,44882,44883,44884,44885,44885,44886,44887,44888,44888,44889,44890,44890, -44891,44892,44893,44893,44894,44895,44895,44896,44897,44898,44898,44899,44900, -44901,44901,44902,44903,44903,44904,44905,44906,44906,44907,44908,44908,44909, -44910,44911,44911,44912,44913,44914,44914,44915,44916,44916,44917,44918,44919, -44919,44920,44921,44921,44922,44923,44924,44924,44925,44926,44927,44927,44928, -44929,44929,44930,44931,44932,44932,44933,44934,44934,44935,44936,44937,44937, -44938,44939,44940,44940,44941,44942,44942,44943,44944,44945,44945,44946,44947, -44947,44948,44949,44950,44950,44951,44952,44952,44953,44954,44955,44955,44956, -44957,44958,44958,44959,44960,44960,44961,44962,44963,44963,44964,44965,44965, -44966,44967,44968,44968,44969,44970,44971,44971,44972,44973,44973,44974,44975, -44976,44976,44977,44978,44978,44979,44980,44981,44981,44982,44983,44983,44984, -44985,44986,44986,44987,44988,44989,44989,44990,44991,44991,44992,44993,44994, -44994,44995,44996,44996,44997,44998,44999,44999,45000,45001,45001,45002,45003, -45004,45004,45005,45006,45007,45007,45008,45009,45009,45010,45011,45012,45012, -45013,45014,45014,45015,45016,45017,45017,45018,45019,45019,45020,45021,45022, -45022,45023,45024,45025,45025,45026,45027,45027,45028,45029,45030,45030,45031, -45032,45032,45033,45034,45035,45035,45036,45037,45037,45038,45039,45040,45040, -45041,45042,45042,45043,45044,45045,45045,45046,45047,45048,45048,45049,45050, -45050,45051,45052,45053,45053,45054,45055,45055,45056,45057,45058,45058,45059, -45060,45060,45061,45062,45063,45063,45064,45065,45065,45066,45067,45068,45068, -45069,45070,45071,45071,45072,45073,45073,45074,45075,45076,45076,45077,45078, -45078,45079,45080,45081,45081,45082,45083,45083,45084,45085,45086,45086,45087, -45088,45088,45089,45090,45091,45091,45092,45093,45094,45094,45095,45096,45096, -45097,45098,45099,45099,45100,45101,45101,45102,45103,45104,45104,45105,45106, -45106,45107,45108,45109,45109,45110,45111,45111,45112,45113,45114,45114,45115, -45116,45116,45117,45118,45119,45119,45120,45121,45121,45122,45123,45124,45124, -45125,45126,45127,45127,45128,45129,45129,45130,45131,45132,45132,45133,45134, -45134,45135,45136,45137,45137,45138,45139,45139,45140,45141,45142,45142,45143, -45144,45144,45145,45146,45147,45147,45148,45149,45149,45150,45151,45152,45152, -45153,45154,45154,45155,45156,45157,45157,45158,45159,45160,45160,45161,45162, -45162,45163,45164,45165,45165,45166,45167,45167,45168,45169,45170,45170,45171, -45172,45172,45173,45174,45175,45175,45176,45177,45177,45178,45179,45180,45180, -45181,45182,45182,45183,45184,45185,45185,45186,45187,45187,45188,45189,45190, -45190,45191,45192,45192,45193,45194,45195,45195,45196,45197,45197,45198,45199, -45200,45200,45201,45202,45202,45203,45204,45205,45205,45206,45207,45207,45208, -45209,45210,45210,45211,45212,45212,45213,45214,45215,45215,45216,45217,45218, -45218,45219,45220,45220,45221,45222,45223,45223,45224,45225,45225,45226,45227, -45228,45228,45229,45230,45230,45231,45232,45233,45233,45234,45235,45235,45236, -45237,45238,45238,45239,45240,45240,45241,45242,45243,45243,45244,45245,45245, -45246,45247,45248,45248,45249,45250,45250,45251,45252,45253,45253,45254,45255, -45255,45256,45257,45258,45258,45259,45260,45260,45261,45262,45263,45263,45264, -45265,45265,45266,45267,45268,45268,45269,45270,45270,45271,45272,45273,45273, -45274,45275,45275,45276,45277,45278,45278,45279,45280,45280,45281,45282,45283, -45283,45284,45285,45285,45286,45287,45288,45288,45289,45290,45290,45291,45292, -45293,45293,45294,45295,45295,45296,45297,45298,45298,45299,45300,45300,45301, -45302,45303,45303,45304,45305,45305,45306,45307,45308,45308,45309,45310,45310, -45311,45312,45313,45313,45314,45315,45315,45316,45317,45318,45318,45319,45320, -45320,45321,45322,45323,45323,45324,45325,45325,45326,45327,45328,45328,45329, -45330,45330,45331,45332,45333,45333,45334,45335,45335,45336,45337,45337,45338, -45339,45340,45340,45341,45342,45342,45343,45344,45345,45345,45346,45347,45347, -45348,45349,45350,45350,45351,45352,45352,45353,45354,45355,45355,45356,45357, -45357,45358,45359,45360,45360,45361,45362,45362,45363,45364,45365,45365,45366, -45367,45367,45368,45369,45370,45370,45371,45372,45372,45373,45374,45375,45375, -45376,45377,45377,45378,45379,45380,45380,45381,45382,45382,45383,45384,45385, -45385,45386,45387,45387,45388,45389,45390,45390,45391,45392,45392,45393,45394, -45394,45395,45396,45397,45397,45398,45399,45399,45400,45401,45402,45402,45403, -45404,45404,45405,45406,45407,45407,45408,45409,45409,45410,45411,45412,45412, -45413,45414,45414,45415,45416,45417,45417,45418,45419,45419,45420,45421,45422, -45422,45423,45424,45424,45425,45426,45427,45427,45428,45429,45429,45430,45431, -45431,45432,45433,45434,45434,45435,45436,45436,45437,45438,45439,45439,45440, -45441,45441,45442,45443,45444,45444,45445,45446,45446,45447,45448,45449,45449, -45450,45451,45451,45452,45453,45454,45454,45455,45456,45456,45457,45458,45458, -45459,45460,45461,45461,45462,45463,45463,45464,45465,45466,45466,45467,45468, -45468,45469,45470,45471,45471,45472,45473,45473,45474,45475,45476,45476,45477, -45478,45478,45479,45480,45481,45481,45482,45483,45483,45484,45485,45485,45486, -45487,45488,45488,45489,45490,45490,45491,45492,45493,45493,45494,45495,45495, -45496,45497,45498,45498,45499,45500,45500,45501,45502,45503,45503,45504,45505, -45505,45506,45507,45507,45508,45509,45510,45510,45511,45512,45512,45513,45514, -45515,45515,45516,45517,45517,45518,45519,45520,45520,45521,45522,45522,45523, -45524,45525,45525,45526,45527,45527,45528,45529,45529,45530,45531,45532,45532, -45533,45534,45534,45535,45536,45537,45537,45538,45539,45539,45540,45541,45542, -45542,45543,45544,45544,45545,45546,45546,45547,45548,45549,45549,45550,45551, -45551,45552,45553,45554,45554,45555,45556,45556,45557,45558,45559,45559,45560, -45561,45561,45562,45563,45564,45564,45565,45566,45566,45567,45568,45568,45569, -45570,45571,45571,45572,45573,45573,45574,45575,45576,45576,45577,45578,45578, -45579,45580,45581,45581,45582,45583,45583,45584,45585,45585,45586,45587,45588, -45588,45589,45590,45590,45591,45592,45593,45593,45594,45595,45595,45596,45597, -45597,45598,45599,45600,45600,45601,45602,45602,45603,45604,45605,45605,45606, -45607,45607,45608,45609,45610,45610,45611,45612,45612,45613,45614,45614,45615, -45616,45617,45617,45618,45619,45619,45620,45621,45622,45622,45623,45624,45624, -45625,45626,45626,45627,45628,45629,45629,45630,45631,45631,45632,45633,45634, -45634,45635,45636,45636,45637,45638,45639,45639,45640,45641,45641,45642,45643, -45643,45644,45645,45646,45646,45647,45648,45648,45649,45650,45651,45651,45652, -45653,45653,45654,45655,45655,45656,45657,45658,45658,45659,45660,45660,45661, -45662,45663,45663,45664,45665,45665,45666,45667,45667,45668,45669,45670,45670, -45671,45672,45672,45673,45674,45675,45675,45676,45677,45677,45678,45679,45679, -45680,45681,45682,45682,45683,45684,45684,45685,45686,45687,45687,45688,45689, -45689,45690,45691,45691,45692,45693,45694,45694,45695,45696,45696,45697,45698, -45699,45699,45700,45701,45701,45702,45703,45703,45704,45705,45706,45706,45707, -45708,45708,45709,45710,45711,45711,45712,45713,45713,45714,45715,45715,45716, -45717,45718,45718,45719,45720,45720,45721,45722,45723,45723,45724,45725,45725, -45726,45727,45727,45728,45729,45730,45730,45731,45732,45732,45733,45734,45735, -45735,45736,45737,45737,45738,45739,45739,45740,45741,45742,45742,45743,45744, -45744,45745,45746,45747,45747,45748,45749,45749,45750,45751,45751,45752,45753, -45754,45754,45755,45756,45756,45757,45758,45758,45759,45760,45761,45761,45762, -45763,45763,45764,45765,45766,45766,45767,45768,45768,45769,45770,45770,45771, -45772,45773,45773,45774,45775,45775,45776,45777,45778,45778,45779,45780,45780, -45781,45782,45782,45783,45784,45785,45785,45786,45787,45787,45788,45789,45789, -45790,45791,45792,45792,45793,45794,45794,45795,45796,45797,45797,45798,45799, -45799,45800,45801,45801,45802,45803,45804,45804,45805,45806,45806,45807,45808, -45808,45809,45810,45811,45811,45812,45813,45813,45814,45815,45816,45816,45817, -45818,45818,45819,45820,45820,45821,45822,45823,45823,45824,45825,45825,45826, -45827,45827,45828,45829,45830,45830,45831,45832,45832,45833,45834,45834,45835, -45836,45837,45837,45838,45839,45839,45840,45841,45842,45842,45843,45844,45844, -45845,45846,45846,45847,45848,45849,45849,45850,45851,45851,45852,45853,45853, -45854,45855,45856,45856,45857,45858,45858,45859,45860,45860,45861,45862,45863, -45863,45864,45865,45865,45866,45867,45868,45868,45869,45870,45870,45871,45872, -45872,45873,45874,45875,45875,45876,45877,45877,45878,45879,45879,45880,45881, -45882,45882,45883,45884,45884,45885,45886,45886,45887,45888,45889,45889,45890, -45891,45891,45892,45893,45894,45894,45895,45896,45896,45897,45898,45898,45899, -45900,45901,45901,45902,45903,45903,45904,45905,45905,45906,45907,45908,45908, -45909,45910,45910,45911,45912,45912,45913,45914,45915,45915,45916,45917,45917, -45918,45919,45919,45920,45921,45922,45922,45923,45924,45924,45925,45926,45926, -45927,45928,45929,45929,45930,45931,45931,45932,45933,45933,45934,45935,45936, -45936,45937,45938,45938,45939,45940,45940,45941,45942,45943,45943,45944,45945, -45945,45946,45947,45948,45948,45949,45950,45950,45951,45952,45952,45953,45954, -45955,45955,45956,45957,45957,45958,45959,45959,45960,45961,45962,45962,45963, -45964,45964,45965,45966,45966,45967,45968,45969,45969,45970,45971,45971,45972, -45973,45973,45974,45975,45976,45976,45977,45978,45978,45979,45980,45980,45981, -45982,45983,45983,45984,45985,45985,45986,45987,45987,45988,45989,45990,45990, -45991,45992,45992,45993,45994,45994,45995,45996,45997,45997,45998,45999,45999, -46000,46001,46001,46002,46003,46004,46004,46005,46006,46006,46007,46008,46008, -46009,46010,46011,46011,46012,46013,46013,46014,46015,46015,46016,46017,46018, -46018,46019,46020,46020,46021,46022,46022,46023,46024,46025,46025,46026,46027, -46027,46028,46029,46029,46030,46031,46031,46032,46033,46034,46034,46035,46036, -46036,46037,46038,46038,46039,46040,46041,46041,46042,46043,46043,46044,46045, -46045,46046,46047,46048,46048,46049,46050,46050,46051,46052,46052,46053,46054, -46055,46055,46056,46057,46057,46058,46059,46059,46060,46061,46062,46062,46063, -46064,46064,46065,46066,46066,46067,46068,46069,46069,46070,46071,46071,46072, -46073,46073,46074,46075,46076,46076,46077,46078,46078,46079,46080,46080,46081, -46082,46082,46083,46084,46085,46085,46086,46087,46087,46088,46089,46089,46090, -46091,46092,46092,46093,46094,46094,46095,46096,46096,46097,46098,46099,46099, -46100,46101,46101,46102,46103,46103,46104,46105,46106,46106,46107,46108,46108, -46109,46110,46110,46111,46112,46112,46113,46114,46115,46115,46116,46117,46117, -46118,46119,46119,46120,46121,46122,46122,46123,46124,46124,46125,46126,46126, -46127,46128,46129,46129,46130,46131,46131,46132,46133,46133,46134,46135,46136, -46136,46137,46138,46138,46139,46140,46140,46141,46142,46142,46143,46144,46145, -46145,46146,46147,46147,46148,46149,46149,46150,46151,46152,46152,46153,46154, -46154,46155,46156,46156,46157,46158,46159,46159,46160,46161,46161,46162,46163, -46163,46164,46165,46165,46166,46167,46168,46168,46169,46170,46170,46171,46172, -46172,46173,46174,46175,46175,46176,46177,46177,46178,46179,46179,46180,46181, -46181,46182,46183,46184,46184,46185,46186,46186,46187,46188,46188,46189,46190, -46191,46191,46192,46193,46193,46194,46195,46195,46196,46197,46197,46198,46199, -46200,46200,46201,46202,46202,46203,46204,46204,46205,46206,46207,46207,46208, -46209,46209,46210,46211,46211,46212,46213,46213,46214,46215,46216,46216,46217, -46218,46218,46219,46220,46220,46221,46222,46223,46223,46224,46225,46225,46226, -46227,46227,46228,46229,46229,46230,46231,46232,46232,46233,46234,46234,46235, -46236,46236,46237,46238,46239,46239,46240,46241,46241,46242,46243,46243,46244, -46245,46245,46246,46247,46248,46248,46249,46250,46250,46251,46252,46252,46253, -46254,46255,46255,46256,46257,46257,46258,46259,46259,46260,46261,46261,46262, -46263,46264,46264,46265,46266,46266,46267,46268,46268,46269,46270,46270,46271, -46272,46273,46273,46274,46275,46275,46276,46277,46277,46278,46279,46280,46280, -46281,46282,46282,46283,46284,46284,46285,46286,46286,46287,46288,46289,46289, -46290,46291,46291,46292,46293,46293,46294,46295,46295,46296,46297,46298,46298, -46299,46300,46300,46301,46302,46302,46303,46304,46304,46305,46306,46307,46307, -46308,46309,46309,46310,46311,46311,46312,46313,46314,46314,46315,46316,46316, -46317,46318,46318,46319,46320,46320,46321,46322,46323,46323,46324,46325,46325, -46326,46327,46327,46328,46329,46329,46330,46331,46332,46332,46333,46334,46334, -46335,46336,46336,46337,46338,46338,46339,46340,46341,46341,46342,46343,46343, -46344,46345,46345,46346,46347,46347,46348,46349,46350,46350,46351,46352,46352, -46353,46354,46354,46355,46356,46356,46357,46358,46359,46359,46360,46361,46361, -46362,46363,46363,46364,46365,46365,46366,46367,46368,46368,46369,46370,46370, -46371,46372,46372,46373,46374,46374,46375,46376,46377,46377,46378,46379,46379, -46380,46381,46381,46382,46383,46383,46384,46385,46386,46386,46387,46388,46388, -46389,46390,46390,46391,46392,46392,46393,46394,46395,46395,46396,46397,46397, -46398,46399,46399,46400,46401,46401,46402,46403,46404,46404,46405,46406,46406, -46407,46408,46408,46409,46410,46410,46411,46412,46413,46413,46414,46415,46415, -46416,46417,46417,46418,46419,46419,46420,46421,46422,46422,46423,46424,46424, -46425,46426,46426,46427,46428,46428,46429,46430,46431,46431,46432,46433,46433, -46434,46435,46435,46436,46437,46437,46438,46439,46440,46440,46441,46442,46442, -46443,46444,46444,46445,46446,46446,46447,46448,46449,46449,46450,46451,46451, -46452,46453,46453,46454,46455,46455,46456,46457,46457,46458,46459,46460,46460, -46461,46462,46462,46463,46464,46464,46465,46466,46466,46467,46468,46469,46469, -46470,46471,46471,46472,46473,46473,46474,46475,46475,46476,46477,46478,46478, -46479,46480,46480,46481,46482,46482,46483,46484,46484,46485,46486,46486,46487, -46488,46489,46489,46490,46491,46491,46492,46493,46493,46494,46495,46495,46496, -46497,46498,46498,46499,46500,46500,46501,46502,46502,46503,46504,46504,46505, -46506,46506,46507,46508,46509,46509,46510,46511,46511,46512,46513,46513,46514, -46515,46515,46516,46517,46518,46518,46519,46520,46520,46521,46522,46522,46523, -46524,46524,46525,46526,46526,46527,46528,46529,46529,46530,46531,46531,46532, -46533,46533,46534,46535,46535,46536,46537,46538,46538,46539,46540,46540,46541, -46542,46542,46543,46544,46544,46545,46546,46546,46547,46548,46549,46549,46550, -46551,46551,46552,46553,46553,46554,46555,46555,46556,46557,46558,46558,46559, -46560,46560,46561,46562,46562,46563,46564,46564,46565,46566,46566,46567,46568, -46569,46569,46570,46571,46571,46572,46573,46573,46574,46575,46575,46576,46577, -46577,46578,46579,46580,46580,46581,46582,46582,46583,46584,46584,46585,46586, -46586,46587,46588,46588,46589,46590,46591,46591,46592,46593,46593,46594,46595, -46595,46596,46597,46597,46598,46599,46600,46600,46601,46602,46602,46603,46604, -46604,46605,46606,46606,46607,46608,46608,46609,46610,46611,46611,46612,46613, -46613,46614,46615,46615,46616,46617,46617,46618,46619,46619,46620,46621,46622, -46622,46623,46624,46624,46625,46626,46626,46627,46628,46628,46629,46630,46630, -46631,46632,46633,46633,46634,46635,46635,46636,46637,46637,46638,46639,46639, -46640,46641,46641,46642,46643,46644,46644,46645,46646,46646,46647,46648,46648, -46649,46650,46650,46651,46652,46652,46653,46654,46655,46655,46656,46657,46657, -46658,46659,46659,46660,46661,46661,46662,46663,46663,46664,46665,46665,46666, -46667,46668,46668,46669,46670,46670,46671,46672,46672,46673,46674,46674,46675, -46676,46676,46677,46678,46679,46679,46680,46681,46681,46682,46683,46683,46684, -46685,46685,46686,46687,46687,46688,46689,46690,46690,46691,46692,46692,46693, -46694,46694,46695,46696,46696,46697,46698,46698,46699,46700,46701,46701,46702, -46703,46703,46704,46705,46705,46706,46707,46707,46708,46709,46709,46710,46711, -46711,46712,46713,46714,46714,46715,46716,46716,46717,46718,46718,46719,46720, -46720,46721,46722,46722,46723,46724,46725,46725,46726,46727,46727,46728,46729, -46729,46730,46731,46731,46732,46733,46733,46734,46735,46735,46736,46737,46738, -46738,46739,46740,46740,46741,46742,46742,46743,46744,46744,46745,46746,46746, -46747,46748,46749,46749,46750,46751,46751,46752,46753,46753,46754,46755,46755, -46756,46757,46757,46758,46759,46759,46760,46761,46762,46762,46763,46764,46764, -46765,46766,46766,46767,46768,46768,46769,46770,46770,46771,46772,46772,46773, -46774,46775,46775,46776,46777,46777,46778,46779,46779,46780,46781,46781,46782, -46783,46783,46784,46785,46785,46786,46787,46788,46788,46789,46790,46790,46791, -46792,46792,46793,46794,46794,46795,46796,46796,46797,46798,46798,46799,46800, -46801,46801,46802,46803,46803,46804,46805,46805,46806,46807,46807,46808,46809, -46809,46810,46811,46811,46812,46813,46814,46814,46815,46816,46816,46817,46818, -46818,46819,46820,46820,46821,46822,46822,46823,46824,46824,46825,46826,46827, -46827,46828,46829,46829,46830,46831,46831,46832,46833,46833,46834,46835,46835, -46836,46837,46837,46838,46839,46840,46840,46841,46842,46842,46843,46844,46844, -46845,46846,46846,46847,46848,46848,46849,46850,46850,46851,46852,46853,46853, -46854,46855,46855,46856,46857,46857,46858,46859,46859,46860,46861,46861,46862, -46863,46863,46864,46865,46865,46866,46867,46868,46868,46869,46870,46870,46871, -46872,46872,46873,46874,46874,46875,46876,46876,46877,46878,46878,46879,46880, -46881,46881,46882,46883,46883,46884,46885,46885,46886,46887,46887,46888,46889, -46889,46890,46891,46891,46892,46893,46893,46894,46895,46896,46896,46897,46898, -46898,46899,46900,46900,46901,46902,46902,46903,46904,46904,46905,46906,46906, -46907,46908,46908,46909,46910,46911,46911,46912,46913,46913,46914,46915,46915, -46916,46917,46917,46918,46919,46919,46920,46921,46921,46922,46923,46923,46924, -46925,46926,46926,46927,46928,46928,46929,46930,46930,46931,46932,46932,46933, -46934,46934,46935,46936,46936,46937,46938,46938,46939,46940,46941,46941,46942, -46943,46943,46944,46945,46945,46946,46947,46947,46948,46949,46949,46950,46951, -46951,46952,46953,46953,46954,46955,46956,46956,46957,46958,46958,46959,46960, -46960,46961,46962,46962,46963,46964,46964,46965,46966,46966,46967,46968,46968, -46969,46970,46971,46971,46972,46973,46973,46974,46975,46975,46976,46977,46977, -46978,46979,46979,46980,46981,46981,46982,46983,46983,46984,46985,46985,46986, -46987,46988,46988,46989,46990,46990,46991,46992,46992,46993,46994,46994,46995, -46996,46996,46997,46998,46998,46999,47000,47000,47001,47002,47003,47003,47004, -47005,47005,47006,47007,47007,47008,47009,47009,47010,47011,47011,47012,47013, -47013,47014,47015,47015,47016,47017,47017,47018,47019,47020,47020,47021,47022, -47022,47023,47024,47024,47025,47026,47026,47027,47028,47028,47029,47030,47030, -47031,47032,47032,47033,47034,47034,47035,47036,47037,47037,47038,47039,47039, -47040,47041,47041,47042,47043,47043,47044,47045,47045,47046,47047,47047,47048, -47049,47049,47050,47051,47051,47052,47053,47054,47054,47055,47056,47056,47057, -47058,47058,47059,47060,47060,47061,47062,47062,47063,47064,47064,47065,47066, -47066,47067,47068,47068,47069,47070,47070,47071,47072,47073,47073,47074,47075, -47075,47076,47077,47077,47078,47079,47079,47080,47081,47081,47082,47083,47083, -47084,47085,47085,47086,47087,47087,47088,47089,47089,47090,47091,47092,47092, -47093,47094,47094,47095,47096,47096,47097,47098,47098,47099,47100,47100,47101, -47102,47102,47103,47104,47104,47105,47106,47106,47107,47108,47108,47109,47110, -47111,47111,47112,47113,47113,47114,47115,47115,47116,47117,47117,47118,47119, -47119,47120,47121,47121,47122,47123,47123,47124,47125,47125,47126,47127,47127, -47128,47129,47130,47130,47131,47132,47132,47133,47134,47134,47135,47136,47136, -47137,47138,47138,47139,47140,47140,47141,47142,47142,47143,47144,47144,47145, -47146,47146,47147,47148,47149,47149,47150,47151,47151,47152,47153,47153,47154, -47155,47155,47156,47157,47157,47158,47159,47159,47160,47161,47161,47162,47163, -47163,47164,47165,47165,47166,47167,47167,47168,47169,47170,47170,47171,47172, -47172,47173,47174,47174,47175,47176,47176,47177,47178,47178,47179,47180,47180, -47181,47182,47182,47183,47184,47184,47185,47186,47186,47187,47188,47188,47189, -47190,47190,47191,47192,47193,47193,47194,47195,47195,47196,47197,47197,47198, -47199,47199,47200,47201,47201,47202,47203,47203,47204,47205,47205,47206,47207, -47207,47208,47209,47209,47210,47211,47211,47212,47213,47214,47214,47215,47216, -47216,47217,47218,47218,47219,47220,47220,47221,47222,47222,47223,47224,47224, -47225,47226,47226,47227,47228,47228,47229,47230,47230,47231,47232,47232,47233, -47234,47234,47235,47236,47236,47237,47238,47239,47239,47240,47241,47241,47242, -47243,47243,47244,47245,47245,47246,47247,47247,47248,47249,47249,47250,47251, -47251,47252,47253,47253,47254,47255,47255,47256,47257,47257,47258,47259,47259, -47260,47261,47261,47262,47263,47264,47264,47265,47266,47266,47267,47268,47268, -47269,47270,47270,47271,47272,47272,47273,47274,47274,47275,47276,47276,47277, -47278,47278,47279,47280,47280,47281,47282,47282,47283,47284,47284,47285,47286, -47286,47287,47288,47289,47289,47290,47291,47291,47292,47293,47293,47294,47295, -47295,47296,47297,47297,47298,47299,47299,47300,47301,47301,47302,47303,47303, -47304,47305,47305,47306,47307,47307,47308,47309,47309,47310,47311,47311,47312, -47313,47313,47314,47315,47316,47316,47317,47318,47318,47319,47320,47320,47321, -47322,47322,47323,47324,47324,47325,47326,47326,47327,47328,47328,47329,47330, -47330,47331,47332,47332,47333,47334,47334,47335,47336,47336,47337,47338,47338, -47339,47340,47340,47341,47342,47342,47343,47344,47344,47345,47346,47347,47347, -47348,47349,47349,47350,47351,47351,47352,47353,47353,47354,47355,47355,47356, -47357,47357,47358,47359,47359,47360,47361,47361,47362,47363,47363,47364,47365, -47365,47366,47367,47367,47368,47369,47369,47370,47371,47371,47372,47373,47373, -47374,47375,47375,47376,47377,47378,47378,47379,47380,47380,47381,47382,47382, -47383,47384,47384,47385,47386,47386,47387,47388,47388,47389,47390,47390,47391, -47392,47392,47393,47394,47394,47395,47396,47396,47397,47398,47398,47399,47400, -47400,47401,47402,47402,47403,47404,47404,47405,47406,47406,47407,47408,47408, -47409,47410,47410,47411,47412,47413,47413,47414,47415,47415,47416,47417,47417, -47418,47419,47419,47420,47421,47421,47422,47423,47423,47424,47425,47425,47426, -47427,47427,47428,47429,47429,47430,47431,47431,47432,47433,47433,47434,47435, -47435,47436,47437,47437,47438,47439,47439,47440,47441,47441,47442,47443,47443, -47444,47445,47445,47446,47447,47447,47448,47449,47449,47450,47451,47452,47452, -47453,47454,47454,47455,47456,47456,47457,47458,47458,47459,47460,47460,47461, -47462,47462,47463,47464,47464,47465,47466,47466,47467,47468,47468,47469,47470, -47470,47471,47472,47472,47473,47474,47474,47475,47476,47476,47477,47478,47478, -47479,47480,47480,47481,47482,47482,47483,47484,47484,47485,47486,47486,47487, -47488,47488,47489,47490,47490,47491,47492,47492,47493,47494,47494,47495,47496, -47497,47497,47498,47499,47499,47500,47501,47501,47502,47503,47503,47504,47505, -47505,47506,47507,47507,47508,47509,47509,47510,47511,47511,47512,47513,47513, -47514,47515,47515,47516,47517,47517,47518,47519,47519,47520,47521,47521,47522, -47523,47523,47524,47525,47525,47526,47527,47527,47528,47529,47529,47530,47531, -47531,47532,47533,47533,47534,47535,47535,47536,47537,47537,47538,47539,47539, -47540,47541,47541,47542,47543,47543,47544,47545,47545,47546,47547,47547,47548, -47549,47549,47550,47551,47552,47552,47553,47554,47554,47555,47556,47556,47557, -47558,47558,47559,47560,47560,47561,47562,47562,47563,47564,47564,47565,47566, -47566,47567,47568,47568,47569,47570,47570,47571,47572,47572,47573,47574,47574, -47575,47576,47576,47577,47578,47578,47579,47580,47580,47581,47582,47582,47583, -47584,47584,47585,47586,47586,47587,47588,47588,47589,47590,47590,47591,47592, -47592,47593,47594,47594,47595,47596,47596,47597,47598,47598,47599,47600,47600, -47601,47602,47602,47603,47604,47604,47605,47606,47606,47607,47608,47608,47609, -47610,47610,47611,47612,47612,47613,47614,47614,47615,47616,47616,47617,47618, -47618,47619,47620,47620,47621,47622,47622,47623,47624,47624,47625,47626,47626, -47627,47628,47628,47629,47630,47631,47631,47632,47633,47633,47634,47635,47635, -47636,47637,47637,47638,47639,47639,47640,47641,47641,47642,47643,47643,47644, -47645,47645,47646,47647,47647,47648,47649,47649,47650,47651,47651,47652,47653, -47653,47654,47655,47655,47656,47657,47657,47658,47659,47659,47660,47661,47661, -47662,47663,47663,47664,47665,47665,47666,47667,47667,47668,47669,47669,47670, -47671,47671,47672,47673,47673,47674,47675,47675,47676,47677,47677,47678,47679, -47679,47680,47681,47681,47682,47683,47683,47684,47685,47685,47686,47687,47687, -47688,47689,47689,47690,47691,47691,47692,47693,47693,47694,47695,47695,47696, -47697,47697,47698,47699,47699,47700,47701,47701,47702,47703,47703,47704,47705, -47705,47706,47707,47707,47708,47709,47709,47710,47711,47711,47712,47713,47713, -47714,47715,47715,47716,47717,47717,47718,47719,47719,47720,47721,47721,47722, -47723,47723,47724,47725,47725,47726,47727,47727,47728,47729,47729,47730,47731, -47731,47732,47733,47733,47734,47735,47735,47736,47737,47737,47738,47739,47739, -47740,47741,47741,47742,47743,47743,47744,47745,47745,47746,47747,47747,47748, -47749,47749,47750,47751,47751,47752,47753,47753,47754,47755,47755,47756,47757, -47757,47758,47759,47759,47760,47761,47761,47762,47763,47763,47764,47765,47765, -47766,47767,47767,47768,47769,47769,47770,47771,47771,47772,47773,47773,47774, -47775,47775,47776,47777,47777,47778,47779,47779,47780,47781,47781,47782,47783, -47783,47784,47785,47785,47786,47787,47787,47788,47789,47789,47790,47791,47791, -47792,47793,47793,47794,47795,47795,47796,47797,47797,47798,47799,47799,47800, -47801,47801,47802,47803,47803,47804,47805,47805,47806,47807,47807,47808,47809, -47809,47810,47811,47811,47812,47813,47813,47814,47815,47815,47816,47817,47817, -47818,47819,47819,47820,47821,47821,47822,47823,47823,47824,47825,47825,47826, -47827,47827,47828,47829,47829,47830,47831,47831,47832,47833,47833,47834,47835, -47835,47836,47837,47837,47838,47839,47839,47840,47841,47841,47842,47843,47843, -47844,47845,47845,47846,47847,47847,47848,47849,47849,47850,47851,47851,47852, -47853,47853,47854,47855,47855,47856,47857,47857,47858,47859,47859,47860,47860, -47861,47862,47862,47863,47864,47864,47865,47866,47866,47867,47868,47868,47869, -47870,47870,47871,47872,47872,47873,47874,47874,47875,47876,47876,47877,47878, -47878,47879,47880,47880,47881,47882,47882,47883,47884,47884,47885,47886,47886, -47887,47888,47888,47889,47890,47890,47891,47892,47892,47893,47894,47894,47895, -47896,47896,47897,47898,47898,47899,47900,47900,47901,47902,47902,47903,47904, -47904,47905,47906,47906,47907,47908,47908,47909,47910,47910,47911,47912,47912, -47913,47914,47914,47915,47916,47916,47917,47918,47918,47919,47920,47920,47921, -47922,47922,47923,47924,47924,47925,47926,47926,47927,47928,47928,47929,47930, -47930,47931,47932,47932,47933,47934,47934,47935,47936,47936,47937,47938,47938, -47939,47939,47940,47941,47941,47942,47943,47943,47944,47945,47945,47946,47947, -47947,47948,47949,47949,47950,47951,47951,47952,47953,47953,47954,47955,47955, -47956,47957,47957,47958,47959,47959,47960,47961,47961,47962,47963,47963,47964, -47965,47965,47966,47967,47967,47968,47969,47969,47970,47971,47971,47972,47973, -47973,47974,47975,47975,47976,47977,47977,47978,47979,47979,47980,47981,47981, -47982,47983,47983,47984,47985,47985,47986,47987,47987,47988,47989,47989,47990, -47991,47991,47992,47993,47993,47994,47994,47995,47996,47996,47997,47998,47998, -47999,48000,48000,48001,48002,48002,48003,48004,48004,48005,48006,48006,48007, -48008,48008,48009,48010,48010,48011,48012,48012,48013,48014,48014,48015,48016, -48016,48017,48018,48018,48019,48020,48020,48021,48022,48022,48023,48024,48024, -48025,48026,48026,48027,48028,48028,48029,48030,48030,48031,48032,48032,48033, -48034,48034,48035,48036,48036,48037,48038,48038,48039,48039,48040,48041,48041, -48042,48043,48043,48044,48045,48045,48046,48047,48047,48048,48049,48049,48050, -48051,48051,48052,48053,48053,48054,48055,48055,48056,48057,48057,48058,48059, -48059,48060,48061,48061,48062,48063,48063,48064,48065,48065,48066,48067,48067, -48068,48069,48069,48070,48071,48071,48072,48073,48073,48074,48075,48075,48076, -48077,48077,48078,48078,48079,48080,48080,48081,48082,48082,48083,48084,48084, -48085,48086,48086,48087,48088,48088,48089,48090,48090,48091,48092,48092,48093, -48094,48094,48095,48096,48096,48097,48098,48098,48099,48100,48100,48101,48102, -48102,48103,48104,48104,48105,48106,48106,48107,48108,48108,48109,48110,48110, -48111,48112,48112,48113,48113,48114,48115,48115,48116,48117,48117,48118,48119, -48119,48120,48121,48121,48122,48123,48123,48124,48125,48125,48126,48127,48127, -48128,48129,48129,48130,48131,48131,48132,48133,48133,48134,48135,48135,48136, -48137,48137,48138,48139,48139,48140,48141,48141,48142,48143,48143,48144,48144, -48145,48146,48146,48147,48148,48148,48149,48150,48150,48151,48152,48152,48153, -48154,48154,48155,48156,48156,48157,48158,48158,48159,48160,48160,48161,48162, -48162,48163,48164,48164,48165,48166,48166,48167,48168,48168,48169,48170,48170, -48171,48172,48172,48173,48173,48174,48175,48175,48176,48177,48177,48178,48179, -48179,48180,48181,48181,48182,48183,48183,48184,48185,48185,48186,48187,48187, -48188,48189,48189,48190,48191,48191,48192,48193,48193,48194,48195,48195,48196, -48197,48197,48198,48199,48199,48200,48201,48201,48202,48202,48203,48204,48204, -48205,48206,48206,48207,48208,48208,48209,48210,48210,48211,48212,48212,48213, -48214,48214,48215,48216,48216,48217,48218,48218,48219,48220,48220,48221,48222, -48222,48223,48224,48224,48225,48226,48226,48227,48228,48228,48229,48229,48230, -48231,48231,48232,48233,48233,48234,48235,48235,48236,48237,48237,48238,48239, -48239,48240,48241,48241,48242,48243,48243,48244,48245,48245,48246,48247,48247, -48248,48249,48249,48250,48251,48251,48252,48252,48253,48254,48254,48255,48256, -48256,48257,48258,48258,48259,48260,48260,48261,48262,48262,48263,48264,48264, -48265,48266,48266,48267,48268,48268,48269,48270,48270,48271,48272,48272,48273, -48274,48274,48275,48276,48276,48277,48277,48278,48279,48279,48280,48281,48281, -48282,48283,48283,48284,48285,48285,48286,48287,48287,48288,48289,48289,48290, -48291,48291,48292,48293,48293,48294,48295,48295,48296,48297,48297,48298,48298, -48299,48300,48300,48301,48302,48302,48303,48304,48304,48305,48306,48306,48307, -48308,48308,48309,48310,48310,48311,48312,48312,48313,48314,48314,48315,48316, -48316,48317,48318,48318,48319,48320,48320,48321,48321,48322,48323,48323,48324, -48325,48325,48326,48327,48327,48328,48329,48329,48330,48331,48331,48332,48333, -48333,48334,48335,48335,48336,48337,48337,48338,48339,48339,48340,48341,48341, -48342,48342,48343,48344,48344,48345,48346,48346,48347,48348,48348,48349,48350, -48350,48351,48352,48352,48353,48354,48354,48355,48356,48356,48357,48358,48358, -48359,48360,48360,48361,48361,48362,48363,48363,48364,48365,48365,48366,48367, -48367,48368,48369,48369,48370,48371,48371,48372,48373,48373,48374,48375,48375, -48376,48377,48377,48378,48379,48379,48380,48380,48381,48382,48382,48383,48384, -48384,48385,48386,48386,48387,48388,48388,48389,48390,48390,48391,48392,48392, -48393,48394,48394,48395,48396,48396,48397,48398,48398,48399,48399,48400,48401, -48401,48402,48403,48403,48404,48405,48405,48406,48407,48407,48408,48409,48409, -48410,48411,48411,48412,48413,48413,48414,48415,48415,48416,48417,48417,48418, -48418,48419,48420,48420,48421,48422,48422,48423,48424,48424,48425,48426,48426, -48427,48428,48428,48429,48430,48430,48431,48432,48432,48433,48434,48434,48435, -48435,48436,48437,48437,48438,48439,48439,48440,48441,48441,48442,48443,48443, -48444,48445,48445,48446,48447,48447,48448,48449,48449,48450,48451,48451,48452, -48453,48453,48454,48454,48455,48456,48456,48457,48458,48458,48459,48460,48460, -48461,48462,48462,48463,48464,48464,48465,48466,48466,48467,48468,48468,48469, -48470,48470,48471,48471,48472,48473,48473,48474,48475,48475,48476,48477,48477, -48478,48479,48479,48480,48481,48481,48482,48483,48483,48484,48485,48485,48486, -48486,48487,48488,48488,48489,48490,48490,48491,48492,48492,48493,48494,48494, -48495,48496,48496,48497,48498,48498,48499,48500,48500,48501,48502,48502,48503, -48503,48504,48505,48505,48506,48507,48507,48508,48509,48509,48510,48511,48511, -48512,48513,48513,48514,48515,48515,48516,48517,48517,48518,48518,48519,48520, -48520,48521,48522,48522,48523,48524,48524,48525,48526,48526,48527,48528,48528, -48529,48530,48530,48531,48532,48532,48533,48534,48534,48535,48535,48536,48537, -48537,48538,48539,48539,48540,48541,48541,48542,48543,48543,48544,48545,48545, -48546,48547,48547,48548,48549,48549,48550,48550,48551,48552,48552,48553,48554, -48554,48555,48556,48556,48557,48558,48558,48559,48560,48560,48561,48562,48562, -48563,48564,48564,48565,48565,48566,48567,48567,48568,48569,48569,48570,48571, -48571,48572,48573,48573,48574,48575,48575,48576,48577,48577,48578,48579,48579, -48580,48580,48581,48582,48582,48583,48584,48584,48585,48586,48586,48587,48588, -48588,48589,48590,48590,48591,48592,48592,48593,48593,48594,48595,48595,48596, -48597,48597,48598,48599,48599,48600,48601,48601,48602,48603,48603,48604,48605, -48605,48606,48607,48607,48608,48608,48609,48610,48610,48611,48612,48612,48613, -48614,48614,48615,48616,48616,48617,48618,48618,48619,48620,48620,48621,48622, -48622,48623,48623,48624,48625,48625,48626,48627,48627,48628,48629,48629,48630, -48631,48631,48632,48633,48633,48634,48635,48635,48636,48636,48637,48638,48638, -48639,48640,48640,48641,48642,48642,48643,48644,48644,48645,48646,48646,48647, -48648,48648,48649,48649,48650,48651,48651,48652,48653,48653,48654,48655,48655, -48656,48657,48657,48658,48659,48659,48660,48661,48661,48662,48662,48663,48664, -48664,48665,48666,48666,48667,48668,48668,48669,48670,48670,48671,48672,48672, -48673,48674,48674,48675,48676,48676,48677,48677,48678,48679,48679,48680,48681, -48681,48682,48683,48683,48684,48685,48685,48686,48687,48687,48688,48689,48689, -48690,48690,48691,48692,48692,48693,48694,48694,48695,48696,48696,48697,48698, -48698,48699,48700,48700,48701,48701,48702,48703,48703,48704,48705,48705,48706, -48707,48707,48708,48709,48709,48710,48711,48711,48712,48713,48713,48714,48714, -48715,48716,48716,48717,48718,48718,48719,48720,48720,48721,48722,48722,48723, -48724,48724,48725,48726,48726,48727,48727,48728,48729,48729,48730,48731,48731, -48732,48733,48733,48734,48735,48735,48736,48737,48737,48738,48739,48739,48740, -48740,48741,48742,48742,48743,48744,48744,48745,48746,48746,48747,48748,48748, -48749,48750,48750,48751,48751,48752,48753,48753,48754,48755,48755,48756,48757, -48757,48758,48759,48759,48760,48761,48761,48762,48763,48763,48764,48764,48765, -48766,48766,48767,48768,48768,48769,48770,48770,48771,48772,48772,48773,48774, -48774,48775,48775,48776,48777,48777,48778,48779,48779,48780,48781,48781,48782, -48783,48783,48784,48785,48785,48786,48787,48787,48788,48788,48789,48790,48790, -48791,48792,48792,48793,48794,48794,48795,48796,48796,48797,48798,48798,48799, -48799,48800,48801,48801,48802,48803,48803,48804,48805,48805,48806,48807,48807, -48808,48809,48809,48810,48810,48811,48812,48812,48813,48814,48814,48815,48816, -48816,48817,48818,48818,48819,48820,48820,48821,48821,48822,48823,48823,48824, -48825,48825,48826,48827,48827,48828,48829,48829,48830,48831,48831,48832,48832, -48833,48834,48834,48835,48836,48836,48837,48838,48838,48839,48840,48840,48841, -48842,48842,48843,48843,48844,48845,48845,48846,48847,48847,48848,48849,48849, -48850,48851,48851,48852,48853,48853,48854,48854,48855,48856,48856,48857,48858, -48858,48859,48860,48860,48861,48862,48862,48863,48864,48864,48865,48865,48866, -48867,48867,48868,48869,48869,48870,48871,48871,48872,48873,48873,48874,48875, -48875,48876,48876,48877,48878,48878,48879,48880,48880,48881,48882,48882,48883, -48884,48884,48885,48886,48886,48887,48887,48888,48889,48889,48890,48891,48891, -48892,48893,48893,48894,48895,48895,48896,48897,48897,48898,48898,48899,48900, -48900,48901,48902,48902,48903,48904,48904,48905,48906,48906,48907,48908,48908, -48909,48909,48910,48911,48911,48912,48913,48913,48914,48915,48915,48916,48917, -48917,48918,48918,48919,48920,48920,48921,48922,48922,48923,48924,48924,48925, -48926,48926,48927,48928,48928,48929,48929,48930,48931,48931,48932,48933,48933, -48934,48935,48935,48936,48937,48937,48938,48939,48939,48940,48940,48941,48942, -48942,48943,48944,48944,48945,48946,48946,48947,48948,48948,48949,48949,48950, -48951,48951,48952,48953,48953,48954,48955,48955,48956,48957,48957,48958,48959, -48959,48960,48960,48961,48962,48962,48963,48964,48964,48965,48966,48966,48967, -48968,48968,48969,48969,48970,48971,48971,48972,48973,48973,48974,48975,48975, -48976,48977,48977,48978,48979,48979,48980,48980,48981,48982,48982,48983,48984, -48984,48985,48986,48986,48987,48988,48988,48989,48989,48990,48991,48991,48992, -48993,48993,48994,48995,48995,48996,48997,48997,48998,48999,48999,49000,49000, -49001,49002,49002,49003,49004,49004,49005,49006,49006,49007,49008,49008,49009, -49009,49010,49011,49011,49012,49013,49013,49014,49015,49015,49016,49017,49017, -49018,49018,49019,49020,49020,49021,49022,49022,49023,49024,49024,49025,49026, -49026,49027,49027,49028,49029,49029,49030,49031,49031,49032,49033,49033,49034, -49035,49035,49036,49037,49037,49038,49038,49039,49040,49040,49041,49042,49042, -49043,49044,49044,49045,49046,49046,49047,49047,49048,49049,49049,49050,49051, -49051,49052,49053,49053,49054,49055,49055,49056,49056,49057,49058,49058,49059, -49060,49060,49061,49062,49062,49063,49064,49064,49065,49065,49066,49067,49067, -49068,49069,49069,49070,49071,49071,49072,49073,49073,49074,49074,49075,49076, -49076,49077,49078,49078,49079,49080,49080,49081,49082,49082,49083,49083,49084, -49085,49085,49086,49087,49087,49088,49089,49089,49090,49091,49091,49092,49092, -49093,49094,49094,49095,49096,49096,49097,49098,49098,49099,49100,49100,49101, -49101,49102,49103,49103,49104,49105,49105,49106,49107,49107,49108,49109,49109, -49110,49110,49111,49112,49112,49113,49114,49114,49115,49116,49116,49117,49118, -49118,49119,49119,49120,49121,49121,49122,49123,49123,49124,49125,49125,49126, -49127,49127,49128,49128,49129,49130,49130,49131,49132,49132,49133,49134,49134, -49135,49136,49136,49137,49137,49138,49139,49139,49140,49141,49141,49142,49143, -49143,49144,49145,49145,49146,49146,49147,49148,49148,49149,49150,49150,49151, -49152,49152,49153,49154,49154,49155,49155,49156,49157,49157,49158,49159,49159, -49160,49161,49161,49162,49163,49163,49164,49164,49165,49166,49166,49167,49168, -49168,49169,49170,49170,49171,49171,49172,49173,49173,49174,49175,49175,49176, -49177,49177,49178,49179,49179,49180,49180,49181,49182,49182,49183,49184,49184, -49185,49186,49186,49187,49188,49188,49189,49189,49190,49191,49191,49192,49193, -49193,49194,49195,49195,49196,49196,49197,49198,49198,49199,49200,49200,49201, -49202,49202,49203,49204,49204,49205,49205,49206,49207,49207,49208,49209,49209, -49210,49211,49211,49212,49213,49213,49214,49214,49215,49216,49216,49217,49218, -49218,49219,49220,49220,49221,49221,49222,49223,49223,49224,49225,49225,49226, -49227,49227,49228,49229,49229,49230,49230,49231,49232,49232,49233,49234,49234, -49235,49236,49236,49237,49238,49238,49239,49239,49240,49241,49241,49242,49243, -49243,49244,49245,49245,49246,49246,49247,49248,49248,49249,49250,49250,49251, -49252,49252,49253,49254,49254,49255,49255,49256,49257,49257,49258,49259,49259, -49260,49261,49261,49262,49262,49263,49264,49264,49265,49266,49266,49267,49268, -49268,49269,49270,49270,49271,49271,49272,49273,49273,49274,49275,49275,49276, -49277,49277,49278,49278,49279,49280,49280,49281,49282,49282,49283,49284,49284, -49285,49286,49286,49287,49287,49288,49289,49289,49290,49291,49291,49292,49293, -49293,49294,49294,49295,49296,49296,49297,49298,49298,49299,49300,49300,49301, -49301,49302,49303,49303,49304,49305,49305,49306,49307,49307,49308,49309,49309, -49310,49310,49311,49312,49312,49313,49314,49314,49315,49316,49316,49317,49317, -49318,49319,49319,49320,49321,49321,49322,49323,49323,49324,49325,49325,49326, -49326,49327,49328,49328,49329,49330,49330,49331,49332,49332,49333,49333,49334, -49335,49335,49336,49337,49337,49338,49339,49339,49340,49340,49341,49342,49342, -49343,49344,49344,49345,49346,49346,49347,49348,49348,49349,49349,49350,49351, -49351,49352,49353,49353,49354,49355,49355,49356,49356,49357,49358,49358,49359, -49360,49360,49361,49362,49362,49363,49363,49364,49365,49365,49366,49367,49367, -49368,49369,49369,49370,49370,49371,49372,49372,49373,49374,49374,49375,49376, -49376,49377,49378,49378,49379,49379,49380,49381,49381,49382,49383,49383,49384, -49385,49385,49386,49386,49387,49388,49388,49389,49390,49390,49391,49392,49392, -49393,49393,49394,49395,49395,49396,49397,49397,49398,49399,49399,49400,49400, -49401,49402,49402,49403,49404,49404,49405,49406,49406,49407,49407,49408,49409, -49409,49410,49411,49411,49412,49413,49413,49414,49414,49415,49416,49416,49417, -49418,49418,49419,49420,49420,49421,49422,49422,49423,49423,49424,49425,49425, -49426,49427,49427,49428,49429,49429,49430,49430,49431,49432,49432,49433,49434, -49434,49435,49436,49436,49437,49437,49438,49439,49439,49440,49441,49441,49442, -49443,49443,49444,49444,49445,49446,49446,49447,49448,49448,49449,49450,49450, -49451,49451,49452,49453,49453,49454,49455,49455,49456,49457,49457,49458,49458, -49459,49460,49460,49461,49462,49462,49463,49464,49464,49465,49465,49466,49467, -49467,49468,49469,49469,49470,49471,49471,49472,49472,49473,49474,49474,49475, -49476,49476,49477,49478,49478,49479,49479,49480,49481,49481,49482,49483,49483, -49484,49485,49485,49486,49486,49487,49488,49488,49489,49490,49490,49491,49492, -49492,49493,49493,49494,49495,49495,49496,49497,49497,49498,49499,49499,49500, -49500,49501,49502,49502,49503,49504,49504,49505,49506,49506,49507,49507,49508, -49509,49509,49510,49511,49511,49512,49513,49513,49514,49514,49515,49516,49516, -49517,49518,49518,49519,49520,49520,49521,49521,49522,49523,49523,49524,49525, -49525,49526,49527,49527,49528,49528,49529,49530,49530,49531,49532,49532,49533, -49534,49534,49535,49535,49536,49537,49537,49538,49539,49539,49540,49541,49541, -49542,49542,49543,49544,49544,49545,49546,49546,49547,49547,49548,49549,49549, -49550,49551,49551,49552,49553,49553,49554,49554,49555,49556,49556,49557,49558, -49558,49559,49560,49560,49561,49561,49562,49563,49563,49564,49565,49565,49566, -49567,49567,49568,49568,49569,49570,49570,49571,49572,49572,49573,49574,49574, -49575,49575,49576,49577,49577,49578,49579,49579,49580,49581,49581,49582,49582, -49583,49584,49584,49585,49586,49586,49587,49587,49588,49589,49589,49590,49591, -49591,49592,49593,49593,49594,49594,49595,49596,49596,49597,49598,49598,49599, -49600,49600,49601,49601,49602,49603,49603,49604,49605,49605,49606,49607,49607, -49608,49608,49609,49610,49610,49611,49612,49612,49613,49614,49614,49615,49615, -49616,49617,49617,49618,49619,49619,49620,49620,49621,49622,49622,49623,49624, -49624,49625,49626,49626,49627,49627,49628,49629,49629,49630,49631,49631,49632, -49633,49633,49634,49634,49635,49636,49636,49637,49638,49638,49639,49639,49640, -49641,49641,49642,49643,49643,49644,49645,49645,49646,49646,49647,49648,49648, -49649,49650,49650,49651,49652,49652,49653,49653,49654,49655,49655,49656,49657, -49657,49658,49658,49659,49660,49660,49661,49662,49662,49663,49664,49664,49665, -49665,49666,49667,49667,49668,49669,49669,49670,49671,49671,49672,49672,49673, -49674,49674,49675,49676,49676,49677,49677,49678,49679,49679,49680,49681,49681, -49682,49683,49683,49684,49684,49685,49686,49686,49687,49688,49688,49689,49690, -49690,49691,49691,49692,49693,49693,49694,49695,49695,49696,49696,49697,49698, -49698,49699,49700,49700,49701,49702,49702,49703,49703,49704,49705,49705,49706, -49707,49707,49708,49709,49709,49710,49710,49711,49712,49712,49713,49714,49714, -49715,49715,49716,49717,49717,49718,49719,49719,49720,49721,49721,49722,49722, -49723,49724,49724,49725,49726,49726,49727,49727,49728,49729,49729,49730,49731, -49731,49732,49733,49733,49734,49734,49735,49736,49736,49737,49738,49738,49739, -49739,49740,49741,49741,49742,49743,49743,49744,49745,49745,49746,49746,49747, -49748,49748,49749,49750,49750,49751,49751,49752,49753,49753,49754,49755,49755, -49756,49757,49757,49758,49758,49759,49760,49760,49761,49762,49762,49763,49763, -49764,49765,49765,49766,49767,49767,49768,49769,49769,49770,49770,49771,49772, -49772,49773,49774,49774,49775,49775,49776,49777,49777,49778,49779,49779,49780, -49781,49781,49782,49782,49783,49784,49784,49785,49786,49786,49787,49787,49788, -49789,49789,49790,49791,49791,49792,49793,49793,49794,49794,49795,49796,49796, -49797,49798,49798,49799,49799,49800,49801,49801,49802,49803,49803,49804,49805, -49805,49806,49806,49807,49808,49808,49809,49810,49810,49811,49811,49812,49813, -49813,49814,49815,49815,49816,49817,49817,49818,49818,49819,49820,49820,49821, -49822,49822,49823,49823,49824,49825,49825,49826,49827,49827,49828,49828,49829, -49830,49830,49831,49832,49832,49833,49834,49834,49835,49835,49836,49837,49837, -49838,49839,49839,49840,49840,49841,49842,49842,49843,49844,49844,49845,49846, -49846,49847,49847,49848,49849,49849,49850,49851,49851,49852,49852,49853,49854, -49854,49855,49856,49856,49857,49857,49858,49859,49859,49860,49861,49861,49862, -49863,49863,49864,49864,49865,49866,49866,49867,49868,49868,49869,49869,49870, -49871,49871,49872,49873,49873,49874,49875,49875,49876,49876,49877,49878,49878, -49879,49880,49880,49881,49881,49882,49883,49883,49884,49885,49885,49886,49886, -49887,49888,49888,49889,49890,49890,49891,49892,49892,49893,49893,49894,49895, -49895,49896,49897,49897,49898,49898,49899,49900,49900,49901,49902,49902,49903, -49903,49904,49905,49905,49906,49907,49907,49908,49908,49909,49910,49910,49911, -49912,49912,49913,49914,49914,49915,49915,49916,49917,49917,49918,49919,49919, -49920,49920,49921,49922,49922,49923,49924,49924,49925,49925,49926,49927,49927, -49928,49929,49929,49930,49931,49931,49932,49932,49933,49934,49934,49935,49936, -49936,49937,49937,49938,49939,49939,49940,49941,49941,49942,49942,49943,49944, -49944,49945,49946,49946,49947,49947,49948,49949,49949,49950,49951,49951,49952, -49953,49953,49954,49954,49955,49956,49956,49957,49958,49958,49959,49959,49960, -49961,49961,49962,49963,49963,49964,49964,49965,49966,49966,49967,49968,49968, -49969,49969,49970,49971,49971,49972,49973,49973,49974,49975,49975,49976,49976, -49977,49978,49978,49979,49980,49980,49981,49981,49982,49983,49983,49984,49985, -49985,49986,49986,49987,49988,49988,49989,49990,49990,49991,49991,49992,49993, -49993,49994,49995,49995,49996,49996,49997,49998,49998,49999,50000,50000,50001, -50002,50002,50003,50003,50004,50005,50005,50006,50007,50007,50008,50008,50009, -50010,50010,50011,50012,50012,50013,50013,50014,50015,50015,50016,50017,50017, -50018,50018,50019,50020,50020,50021,50022,50022,50023,50023,50024,50025,50025, -50026,50027,50027,50028,50028,50029,50030,50030,50031,50032,50032,50033,50034, -50034,50035,50035,50036,50037,50037,50038,50039,50039,50040,50040,50041,50042, -50042,50043,50044,50044,50045,50045,50046,50047,50047,50048,50049,50049,50050, -50050,50051,50052,50052,50053,50054,50054,50055,50055,50056,50057,50057,50058, -50059,50059,50060,50060,50061,50062,50062,50063,50064,50064,50065,50065,50066, -50067,50067,50068,50069,50069,50070,50070,50071,50072,50072,50073,50074,50074, -50075,50076,50076,50077,50077,50078,50079,50079,50080,50081,50081,50082,50082, -50083,50084,50084,50085,50086,50086,50087,50087,50088,50089,50089,50090,50091, -50091,50092,50092,50093,50094,50094,50095,50096,50096,50097,50097,50098,50099, -50099,50100,50101,50101,50102,50102,50103,50104,50104,50105,50106,50106,50107, -50107,50108,50109,50109,50110,50111,50111,50112,50112,50113,50114,50114,50115, -50116,50116,50117,50117,50118,50119,50119,50120,50121,50121,50122,50122,50123, -50124,50124,50125,50126,50126,50127,50127,50128,50129,50129,50130,50131,50131, -50132,50132,50133,50134,50134,50135,50136,50136,50137,50137,50138,50139,50139, -50140,50141,50141,50142,50142,50143,50144,50144,50145,50146,50146,50147,50147, -50148,50149,50149,50150,50151,50151,50152,50152,50153,50154,50154,50155,50156, -50156,50157,50157,50158,50159,50159,50160,50161,50161,50162,50162,50163,50164, -50164,50165,50166,50166,50167,50167,50168,50169,50169,50170,50171,50171,50172, -50172,50173,50174,50174,50175,50176,50176,50177,50177,50178,50179,50179,50180, -50181,50181,50182,50182,50183,50184,50184,50185,50186,50186,50187,50187,50188, -50189,50189,50190,50191,50191,50192,50192,50193,50194,50194,50195,50196,50196, -50197,50197,50198,50199,50199,50200,50201,50201,50202,50202,50203,50204,50204, -50205,50206,50206,50207,50207,50208,50209,50209,50210,50211,50211,50212,50212, -50213,50214,50214,50215,50216,50216,50217,50217,50218,50219,50219,50220,50221, -50221,50222,50222,50223,50224,50224,50225,50226,50226,50227,50227,50228,50229, -50229,50230,50231,50231,50232,50232,50233,50234,50234,50235,50236,50236,50237, -50237,50238,50239,50239,50240,50241,50241,50242,50242,50243,50244,50244,50245, -50246,50246,50247,50247,50248,50249,50249,50250,50251,50251,50252,50252,50253, -50254,50254,50255,50256,50256,50257,50257,50258,50259,50259,50260,50261,50261, -50262,50262,50263,50264,50264,50265,50265,50266,50267,50267,50268,50269,50269, -50270,50270,50271,50272,50272,50273,50274,50274,50275,50275,50276,50277,50277, -50278,50279,50279,50280,50280,50281,50282,50282,50283,50284,50284,50285,50285, -50286,50287,50287,50288,50289,50289,50290,50290,50291,50292,50292,50293,50294, -50294,50295,50295,50296,50297,50297,50298,50299,50299,50300,50300,50301,50302, -50302,50303,50304,50304,50305,50305,50306,50307,50307,50308,50308,50309,50310, -50310,50311,50312,50312,50313,50313,50314,50315,50315,50316,50317,50317,50318, -50318,50319,50320,50320,50321,50322,50322,50323,50323,50324,50325,50325,50326, -50327,50327,50328,50328,50329,50330,50330,50331,50332,50332,50333,50333,50334, -50335,50335,50336,50337,50337,50338,50338,50339,50340,50340,50341,50341,50342, -50343,50343,50344,50345,50345,50346,50346,50347,50348,50348,50349,50350,50350, -50351,50351,50352,50353,50353,50354,50355,50355,50356,50356,50357,50358,50358, -50359,50360,50360,50361,50361,50362,50363,50363,50364,50364,50365,50366,50366, -50367,50368,50368,50369,50369,50370,50371,50371,50372,50373,50373,50374,50374, -50375,50376,50376,50377,50378,50378,50379,50379,50380,50381,50381,50382,50383, -50383,50384,50384,50385,50386,50386,50387,50387,50388,50389,50389,50390,50391, -50391,50392,50392,50393,50394,50394,50395,50396,50396,50397,50397,50398,50399, -50399,50400,50401,50401,50402,50402,50403,50404,50404,50405,50406,50406,50407, -50407,50408,50409,50409,50410,50410,50411,50412,50412,50413,50414,50414,50415, -50415,50416,50417,50417,50418,50419,50419,50420,50420,50421,50422,50422,50423, -50424,50424,50425,50425,50426,50427,50427,50428,50428,50429,50430,50430,50431, -50432,50432,50433,50433,50434,50435,50435,50436,50437,50437,50438,50438,50439, -50440,50440,50441,50442,50442,50443,50443,50444,50445,50445,50446,50446,50447, -50448,50448,50449,50450,50450,50451,50451,50452,50453,50453,50454,50455,50455, -50456,50456,50457,50458,50458,50459,50460,50460,50461,50461,50462,50463,50463, -50464,50464,50465,50466,50466,50467,50468,50468,50469,50469,50470,50471,50471, -50472,50473,50473,50474,50474,50475,50476,50476,50477,50477,50478,50479,50479, -50480,50481,50481,50482,50482,50483,50484,50484,50485,50486,50486,50487,50487, -50488,50489,50489,50490,50491,50491,50492,50492,50493,50494,50494,50495,50495, -50496,50497,50497,50498,50499,50499,50500,50500,50501,50502,50502,50503,50504, -50504,50505,50505,50506,50507,50507,50508,50508,50509,50510,50510,50511,50512, -50512,50513,50513,50514,50515,50515,50516,50517,50517,50518,50518,50519,50520, -50520,50521,50521,50522,50523,50523,50524,50525,50525,50526,50526,50527,50528, -50528,50529,50530,50530,50531,50531,50532,50533,50533,50534,50534,50535,50536, -50536,50537,50538,50538,50539,50539,50540,50541,50541,50542,50543,50543,50544, -50544,50545,50546,50546,50547,50547,50548,50549,50549,50550,50551,50551,50552, -50552,50553,50554,50554,50555,50556,50556,50557,50557,50558,50559,50559,50560, -50560,50561,50562,50562,50563,50564,50564,50565,50565,50566,50567,50567,50568, -50569,50569,50570,50570,50571,50572,50572,50573,50573,50574,50575,50575,50576, -50577,50577,50578,50578,50579,50580,50580,50581,50582,50582,50583,50583,50584, -50585,50585,50586,50586,50587,50588,50588,50589,50590,50590,50591,50591,50592, -50593,50593,50594,50595,50595,50596,50596,50597,50598,50598,50599,50599,50600, -50601,50601,50602,50603,50603,50604,50604,50605,50606,50606,50607,50607,50608, -50609,50609,50610,50611,50611,50612,50612,50613,50614,50614,50615,50616,50616, -50617,50617,50618,50619,50619,50620,50620,50621,50622,50622,50623,50624,50624, -50625,50625,50626,50627,50627,50628,50628,50629,50630,50630,50631,50632,50632, -50633,50633,50634,50635,50635,50636,50637,50637,50638,50638,50639,50640,50640, -50641,50641,50642,50643,50643,50644,50645,50645,50646,50646,50647,50648,50648, -50649,50649,50650,50651,50651,50652,50653,50653,50654,50654,50655,50656,50656, -50657,50657,50658,50659,50659,50660,50661,50661,50662,50662,50663,50664,50664, -50665,50666,50666,50667,50667,50668,50669,50669,50670,50670,50671,50672,50672, -50673,50674,50674,50675,50675,50676,50677,50677,50678,50678,50679,50680,50680, -50681,50682,50682,50683,50683,50684,50685,50685,50686,50686,50687,50688,50688, -50689,50690,50690,50691,50691,50692,50693,50693,50694,50695,50695,50696,50696, -50697,50698,50698,50699,50699,50700,50701,50701,50702,50703,50703,50704,50704, -50705,50706,50706,50707,50707,50708,50709,50709,50710,50711,50711,50712,50712, -50713,50714,50714,50715,50715,50716,50717,50717,50718,50719,50719,50720,50720, -50721,50722,50722,50723,50723,50724,50725,50725,50726,50727,50727,50728,50728, -50729,50730,50730,50731,50731,50732,50733,50733,50734,50735,50735,50736,50736, -50737,50738,50738,50739,50739,50740,50741,50741,50742,50743,50743,50744,50744, -50745,50746,50746,50747,50747,50748,50749,50749,50750,50751,50751,50752,50752, -50753,50754,50754,50755,50755,50756,50757,50757,50758,50759,50759,50760,50760, -50761,50762,50762,50763,50763,50764,50765,50765,50766,50767,50767,50768,50768, -50769,50770,50770,50771,50771,50772,50773,50773,50774,50775,50775,50776,50776, -50777,50778,50778,50779,50779,50780,50781,50781,50782,50783,50783,50784,50784, -50785,50786,50786,50787,50787,50788,50789,50789,50790,50791,50791,50792,50792, -50793,50794,50794,50795,50795,50796,50797,50797,50798,50799,50799,50800,50800, -50801,50802,50802,50803,50803,50804,50805,50805,50806,50807,50807,50808,50808, -50809,50810,50810,50811,50811,50812,50813,50813,50814,50815,50815,50816,50816, -50817,50818,50818,50819,50819,50820,50821,50821,50822,50823,50823,50824,50824, -50825,50826,50826,50827,50827,50828,50829,50829,50830,50831,50831,50832,50832, -50833,50834,50834,50835,50835,50836,50837,50837,50838,50839,50839,50840,50840, -50841,50842,50842,50843,50843,50844,50845,50845,50846,50846,50847,50848,50848, -50849,50850,50850,50851,50851,50852,50853,50853,50854,50854,50855,50856,50856, -50857,50858,50858,50859,50859,50860,50861,50861,50862,50862,50863,50864,50864, -50865,50866,50866,50867,50867,50868,50869,50869,50870,50870,50871,50872,50872, -50873,50874,50874,50875,50875,50876,50877,50877,50878,50878,50879,50880,50880, -50881,50881,50882,50883,50883,50884,50885,50885,50886,50886,50887,50888,50888, -50889,50889,50890,50891,50891,50892,50893,50893,50894,50894,50895,50896,50896, -50897,50897,50898,50899,50899,50900,50900,50901,50902,50902,50903,50904,50904, -50905,50905,50906,50907,50907,50908,50908,50909,50910,50910,50911,50912,50912, -50913,50913,50914,50915,50915,50916,50916,50917,50918,50918,50919,50920,50920, -50921,50921,50922,50923,50923,50924,50924,50925,50926,50926,50927,50927,50928, -50929,50929,50930,50931,50931,50932,50932,50933,50934,50934,50935,50935,50936, -50937,50937,50938,50939,50939,50940,50940,50941,50942,50942,50943,50943,50944, -50945,50945,50946,50946,50947,50948,50948,50949,50950,50950,50951,50951,50952, -50953,50953,50954,50954,50955,50956,50956,50957,50957,50958,50959,50959,50960, -50961,50961,50962,50962,50963,50964,50964,50965,50965,50966,50967,50967,50968, -50969,50969,50970,50970,50971,50972,50972,50973,50973,50974,50975,50975,50976, -50976,50977,50978,50978,50979,50980,50980,50981,50981,50982,50983,50983,50984, -50984,50985,50986,50986,50987,50987,50988,50989,50989,50990,50991,50991,50992, -50992,50993,50994,50994,50995,50995,50996,50997,50997,50998,50998,50999,51000, -51000,51001,51002,51002,51003,51003,51004,51005,51005,51006,51006,51007,51008, -51008,51009,51010,51010,51011,51011,51012,51013,51013,51014,51014,51015,51016, -51016,51017,51017,51018,51019,51019,51020,51021,51021,51022,51022,51023,51024, -51024,51025,51025,51026,51027,51027,51028,51028,51029,51030,51030,51031,51032, -51032,51033,51033,51034,51035,51035,51036,51036,51037,51038,51038,51039,51039, -51040,51041,51041,51042,51043,51043,51044,51044,51045,51046,51046,51047,51047, -51048,51049,51049,51050,51050,51051,51052,51052,51053,51054,51054,51055,51055, -51056,51057,51057,51058,51058,51059,51060,51060,51061,51061,51062,51063,51063, -51064,51065,51065,51066,51066,51067,51068,51068,51069,51069,51070,51071,51071, -51072,51072,51073,51074,51074,51075,51075,51076,51077,51077,51078,51079,51079, -51080,51080,51081,51082,51082,51083,51083,51084,51085,51085,51086,51086,51087, -51088,51088,51089,51090,51090,51091,51091,51092,51093,51093,51094,51094,51095, -51096,51096,51097,51097,51098,51099,51099,51100,51101,51101,51102,51102,51103, -51104,51104,51105,51105,51106,51107,51107,51108,51108,51109,51110,51110,51111, -51112,51112,51113,51113,51114,51115,51115,51116,51116,51117,51118,51118,51119, -51119,51120,51121,51121,51122,51122,51123,51124,51124,51125,51126,51126,51127, -51127,51128,51129,51129,51130,51130,51131,51132,51132,51133,51133,51134,51135, -51135,51136,51137,51137,51138,51138,51139,51140,51140,51141,51141,51142,51143, -51143,51144,51144,51145,51146,51146,51147,51147,51148,51149,51149,51150,51151, -51151,51152,51152,51153,51154,51154,51155,51155,51156,51157,51157,51158,51158, -51159,51160,51160,51161,51161,51162,51163,51163,51164,51165,51165,51166,51166, -51167,51168,51168,51169,51169,51170,51171,51171,51172,51172,51173,51174,51174, -51175,51175,51176,51177,51177,51178,51179,51179,51180,51180,51181,51182,51182, -51183,51183,51184,51185,51185,51186,51186,51187,51188,51188,51189,51190,51190, -51191,51191,51192,51193,51193,51194,51194,51195,51196,51196,51197,51197,51198, -51199,51199,51200,51200,51201,51202,51202,51203,51203,51204,51205,51205,51206, -51207,51207,51208,51208,51209,51210,51210,51211,51211,51212,51213,51213,51214, -51214,51215,51216,51216,51217,51217,51218,51219,51219,51220,51221,51221,51222, -51222,51223,51224,51224,51225,51225,51226,51227,51227,51228,51228,51229,51230, -51230,51231,51231,51232,51233,51233,51234,51235,51235,51236,51236,51237,51238, -51238,51239,51239,51240,51241,51241,51242,51242,51243,51244,51244,51245,51245, -51246,51247,51247,51248,51249,51249,51250,51250,51251,51252,51252,51253,51253, -51254,51255,51255,51256,51256,51257,51258,51258,51259,51259,51260,51261,51261, -51262,51262,51263,51264,51264,51265,51266,51266,51267,51267,51268,51269,51269, -51270,51270,51271,51272,51272,51273,51273,51274,51275,51275,51276,51276,51277, -51278,51278,51279,51279,51280,51281,51281,51282,51283,51283,51284,51284,51285, -51286,51286,51287,51287,51288,51289,51289,51290,51290,51291,51292,51292,51293, -51293,51294,51295,51295,51296,51296,51297,51298,51298,51299,51300,51300,51301, -51301,51302,51303,51303,51304,51304,51305,51306,51306,51307,51307,51308,51309, -51309,51310,51310,51311,51312,51312,51313,51313,51314,51315,51315,51316,51317, -51317,51318,51318,51319,51320,51320,51321,51321,51322,51323,51323,51324,51324, -51325,51326,51326,51327,51327,51328,51329,51329,51330,51330,51331,51332,51332, -51333,51334,51334,51335,51335,51336,51337,51337,51338,51338,51339,51340,51340, -51341,51341,51342,51343,51343,51344,51344,51345,51346,51346,51347,51347,51348, -51349,51349,51350,51350,51351,51352,51352,51353,51354,51354,51355,51355,51356, -51357,51357,51358,51358,51359,51360,51360,51361,51361,51362,51363,51363,51364, -51364,51365,51366,51366,51367,51367,51368,51369,51369,51370,51370,51371,51372, -51372,51373,51374,51374,51375,51375,51376,51377,51377,51378,51378,51379,51380, -51380,51381,51381,51382,51383,51383,51384,51384,51385,51386,51386,51387,51387, -51388,51389,51389,51390,51390,51391,51392,51392,51393,51394,51394,51395,51395, -51396,51397,51397,51398,51398,51399,51400,51400,51401,51401,51402,51403,51403, -51404,51404,51405,51406,51406,51407,51407,51408,51409,51409,51410,51410,51411, -51412,51412,51413,51413,51414,51415,51415,51416,51417,51417,51418,51418,51419, -51420,51420,51421,51421,51422,51423,51423,51424,51424,51425,51426,51426,51427, -51427,51428,51429,51429,51430,51430,51431,51432,51432,51433,51433,51434,51435, -51435,51436,51436,51437,51438,51438,51439,51440,51440,51441,51441,51442,51443, -51443,51444,51444,51445,51446,51446,51447,51447,51448,51449,51449,51450,51450, -51451,51452,51452,51453,51453,51454,51455,51455,51456,51456,51457,51458,51458, -51459,51459,51460,51461,51461,51462,51462,51463,51464,51464,51465,51466,51466, -51467,51467,51468,51469,51469,51470,51470,51471,51472,51472,51473,51473,51474, -51475,51475,51476,51476,51477,51478,51478,51479,51479,51480,51481,51481,51482, -51482,51483,51484,51484,51485,51485,51486,51487,51487,51488,51488,51489,51490, -51490,51491,51491,51492,51493,51493,51494,51495,51495,51496,51496,51497,51498, -51498,51499,51499,51500,51501,51501,51502,51502,51503,51504,51504,51505,51505, -51506,51507,51507,51508,51508,51509,51510,51510,51511,51511,51512,51513,51513, -51514,51514,51515,51516,51516,51517,51517,51518,51519,51519,51520,51520,51521, -51522,51522,51523,51523,51524,51525,51525,51526,51527,51527,51528,51528,51529, -51530,51530,51531,51531,51532,51533,51533,51534,51534,51535,51536,51536,51537, -51537,51538,51539,51539,51540,51540,51541,51542,51542,51543,51543,51544,51545, -51545,51546,51546,51547,51548,51548,51549,51549,51550,51551,51551,51552,51552, -51553,51554,51554,51555,51555,51556,51557,51557,51558,51558,51559,51560,51560, -51561,51561,51562,51563,51563,51564,51565,51565,51566,51566,51567,51568,51568, -51569,51569,51570,51571,51571,51572,51572,51573,51574,51574,51575,51575,51576, -51577,51577,51578,51578,51579,51580,51580,51581,51581,51582,51583,51583,51584, -51584,51585,51586,51586,51587,51587,51588,51589,51589,51590,51590,51591,51592, -51592,51593,51593,51594,51595,51595,51596,51596,51597,51598,51598,51599,51599, -51600,51601,51601,51602,51602,51603,51604,51604,51605,51605,51606,51607,51607, -51608,51609,51609,51610,51610,51611,51612,51612,51613,51613,51614,51615,51615, -51616,51616,51617,51618,51618,51619,51619,51620,51621,51621,51622,51622,51623, -51624,51624,51625,51625,51626,51627,51627,51628,51628,51629,51630,51630,51631, -51631,51632,51633,51633,51634,51634,51635,51636,51636,51637,51637,51638,51639, -51639,51640,51640,51641,51642,51642,51643,51643,51644,51645,51645,51646,51646, -51647,51648,51648,51649,51649,51650,51651,51651,51652,51652,51653,51654,51654, -51655,51655,51656,51657,51657,51658,51658,51659,51660,51660,51661,51661,51662, -51663,51663,51664,51664,51665,51666,51666,51667,51667,51668,51669,51669,51670, -51670,51671,51672,51672,51673,51673,51674,51675,51675,51676,51677,51677,51678, -51678,51679,51680,51680,51681,51681,51682,51683,51683,51684,51684,51685,51686, -51686,51687,51687,51688,51689,51689,51690,51690,51691,51692,51692,51693,51693, -51694,51695,51695,51696,51696,51697,51698,51698,51699,51699,51700,51701,51701, -51702,51702,51703,51704,51704,51705,51705,51706,51707,51707,51708,51708,51709, -51710,51710,51711,51711,51712,51713,51713,51714,51714,51715,51716,51716,51717, -51717,51718,51719,51719,51720,51720,51721,51722,51722,51723,51723,51724,51725, -51725,51726,51726,51727,51728,51728,51729,51729,51730,51731,51731,51732,51732, -51733,51734,51734,51735,51735,51736,51737,51737,51738,51738,51739,51740,51740, -51741,51741,51742,51743,51743,51744,51744,51745,51746,51746,51747,51747,51748, -51749,51749,51750,51750,51751,51752,51752,51753,51753,51754,51755,51755,51756, -51756,51757,51758,51758,51759,51759,51760,51761,51761,51762,51762,51763,51764, -51764,51765,51765,51766,51767,51767,51768,51768,51769,51770,51770,51771,51771, -51772,51773,51773,51774,51774,51775,51776,51776,51777,51777,51778,51779,51779, -51780,51780,51781,51782,51782,51783,51783,51784,51785,51785,51786,51786,51787, -51788,51788,51789,51789,51790,51791,51791,51792,51792,51793,51794,51794,51795, -51795,51796,51797,51797,51798,51798,51799,51800,51800,51801,51801,51802,51803, -51803,51804,51804,51805,51806,51806,51807,51807,51808,51809,51809,51810,51810, -51811,51812,51812,51813,51813,51814,51815,51815,51816,51816,51817,51818,51818, -51819,51819,51820,51821,51821,51822,51822,51823,51824,51824,51825,51825,51826, -51827,51827,51828,51828,51829,51830,51830,51831,51831,51832,51833,51833,51834, -51834,51835,51836,51836,51837,51837,51838,51839,51839,51840,51840,51841,51842, -51842,51843,51843,51844,51844,51845,51846,51846,51847,51847,51848,51849,51849, -51850,51850,51851,51852,51852,51853,51853,51854,51855,51855,51856,51856,51857, -51858,51858,51859,51859,51860,51861,51861,51862,51862,51863,51864,51864,51865, -51865,51866,51867,51867,51868,51868,51869,51870,51870,51871,51871,51872,51873, -51873,51874,51874,51875,51876,51876,51877,51877,51878,51879,51879,51880,51880, -51881,51882,51882,51883,51883,51884,51885,51885,51886,51886,51887,51888,51888, -51889,51889,51890,51891,51891,51892,51892,51893,51894,51894,51895,51895,51896, -51897,51897,51898,51898,51899,51900,51900,51901,51901,51902,51903,51903,51904, -51904,51905,51906,51906,51907,51907,51908,51909,51909,51910,51910,51911,51911, -51912,51913,51913,51914,51914,51915,51916,51916,51917,51917,51918,51919,51919, -51920,51920,51921,51922,51922,51923,51923,51924,51925,51925,51926,51926,51927, -51928,51928,51929,51929,51930,51931,51931,51932,51932,51933,51934,51934,51935, -51935,51936,51937,51937,51938,51938,51939,51940,51940,51941,51941,51942,51943, -51943,51944,51944,51945,51946,51946,51947,51947,51948,51949,51949,51950,51950, -51951,51952,51952,51953,51953,51954,51955,51955,51956,51956,51957,51957,51958, -51959,51959,51960,51960,51961,51962,51962,51963,51963,51964,51965,51965,51966, -51966,51967,51968,51968,51969,51969,51970,51971,51971,51972,51972,51973,51974, -51974,51975,51975,51976,51977,51977,51978,51978,51979,51980,51980,51981,51981, -51982,51983,51983,51984,51984,51985,51986,51986,51987,51987,51988,51989,51989, -51990,51990,51991,51992,51992,51993,51993,51994,51994,51995,51996,51996,51997, -51997,51998,51999,51999,52000,52000,52001,52002,52002,52003,52003,52004,52005, -52005,52006,52006,52007,52008,52008,52009,52009,52010,52011,52011,52012,52012, -52013,52014,52014,52015,52015,52016,52017,52017,52018,52018,52019,52020,52020, -52021,52021,52022,52023,52023,52024,52024,52025,52025,52026,52027,52027,52028, -52028,52029,52030,52030,52031,52031,52032,52033,52033,52034,52034,52035,52036, -52036,52037,52037,52038,52039,52039,52040,52040,52041,52042,52042,52043,52043, -52044,52045,52045,52046,52046,52047,52048,52048,52049,52049,52050,52051,52051, -52052,52052,52053,52053,52054,52055,52055,52056,52056,52057,52058,52058,52059, -52059,52060,52061,52061,52062,52062,52063,52064,52064,52065,52065,52066,52067, -52067,52068,52068,52069,52070,52070,52071,52071,52072,52073,52073,52074,52074, -52075,52076,52076,52077,52077,52078,52078,52079,52080,52080,52081,52081,52082, -52083,52083,52084,52084,52085,52086,52086,52087,52087,52088,52089,52089,52090, -52090,52091,52092,52092,52093,52093,52094,52095,52095,52096,52096,52097,52098, -52098,52099,52099,52100,52101,52101,52102,52102,52103,52103,52104,52105,52105, -52106,52106,52107,52108,52108,52109,52109,52110,52111,52111,52112,52112,52113, -52114,52114,52115,52115,52116,52117,52117,52118,52118,52119,52120,52120,52121, -52121,52122,52123,52123,52124,52124,52125,52125,52126,52127,52127,52128,52128, -52129,52130,52130,52131,52131,52132,52133,52133,52134,52134,52135,52136,52136, -52137,52137,52138,52139,52139,52140,52140,52141,52142,52142,52143,52143,52144, -52145,52145,52146,52146,52147,52147,52148,52149,52149,52150,52150,52151,52152, -52152,52153,52153,52154,52155,52155,52156,52156,52157,52158,52158,52159,52159, -52160,52161,52161,52162,52162,52163,52164,52164,52165,52165,52166,52166,52167, -52168,52168,52169,52169,52170,52171,52171,52172,52172,52173,52174,52174,52175, -52175,52176,52177,52177,52178,52178,52179,52180,52180,52181,52181,52182,52183, -52183,52184,52184,52185,52185,52186,52187,52187,52188,52188,52189,52190,52190, -52191,52191,52192,52193,52193,52194,52194,52195,52196,52196,52197,52197,52198, -52199,52199,52200,52200,52201,52202,52202,52203,52203,52204,52204,52205,52206, -52206,52207,52207,52208,52209,52209,52210,52210,52211,52212,52212,52213,52213, -52214,52215,52215,52216,52216,52217,52218,52218,52219,52219,52220,52220,52221, -52222,52222,52223,52223,52224,52225,52225,52226,52226,52227,52228,52228,52229, -52229,52230,52231,52231,52232,52232,52233,52234,52234,52235,52235,52236,52236, -52237,52238,52238,52239,52239,52240,52241,52241,52242,52242,52243,52244,52244, -52245,52245,52246,52247,52247,52248,52248,52249,52250,52250,52251,52251,52252, -52252,52253,52254,52254,52255,52255,52256,52257,52257,52258,52258,52259,52260, -52260,52261,52261,52262,52263,52263,52264,52264,52265,52266,52266,52267,52267, -52268,52268,52269,52270,52270,52271,52271,52272,52273,52273,52274,52274,52275, -52276,52276,52277,52277,52278,52279,52279,52280,52280,52281,52282,52282,52283, -52283,52284,52284,52285,52286,52286,52287,52287,52288,52289,52289,52290,52290, -52291,52292,52292,52293,52293,52294,52295,52295,52296,52296,52297,52298,52298, -52299,52299,52300,52300,52301,52302,52302,52303,52303,52304,52305,52305,52306, -52306,52307,52308,52308,52309,52309,52310,52311,52311,52312,52312,52313,52313, -52314,52315,52315,52316,52316,52317,52318,52318,52319,52319,52320,52321,52321, -52322,52322,52323,52324,52324,52325,52325,52326,52327,52327,52328,52328,52329, -52329,52330,52331,52331,52332,52332,52333,52334,52334,52335,52335,52336,52337, -52337,52338,52338,52339,52340,52340,52341,52341,52342,52342,52343,52344,52344, -52345,52345,52346,52347,52347,52348,52348,52349,52350,52350,52351,52351,52352, -52353,52353,52354,52354,52355,52355,52356,52357,52357,52358,52358,52359,52360, -52360,52361,52361,52362,52363,52363,52364,52364,52365,52366,52366,52367,52367, -52368,52368,52369,52370,52370,52371,52371,52372,52373,52373,52374,52374,52375, -52376,52376,52377,52377,52378,52379,52379,52380,52380,52381,52381,52382,52383, -52383,52384,52384,52385,52386,52386,52387,52387,52388,52389,52389,52390,52390, -52391,52392,52392,52393,52393,52394,52394,52395,52396,52396,52397,52397,52398, -52399,52399,52400,52400,52401,52402,52402,52403,52403,52404,52405,52405,52406, -52406,52407,52407,52408,52409,52409,52410,52410,52411,52412,52412,52413,52413, -52414,52415,52415,52416,52416,52417,52417,52418,52419,52419,52420,52420,52421, -52422,52422,52423,52423,52424,52425,52425,52426,52426,52427,52428,52428,52429, -52429,52430,52430,52431,52432,52432,52433,52433,52434,52435,52435,52436,52436, -52437,52438,52438,52439,52439,52440,52440,52441,52442,52442,52443,52443,52444, -52445,52445,52446,52446,52447,52448,52448,52449,52449,52450,52451,52451,52452, -52452,52453,52453,52454,52455,52455,52456,52456,52457,52458,52458,52459,52459, -52460,52461,52461,52462,52462,52463,52463,52464,52465,52465,52466,52466,52467, -52468,52468,52469,52469,52470,52471,52471,52472,52472,52473,52474,52474,52475, -52475,52476,52476,52477,52478,52478,52479,52479,52480,52481,52481,52482,52482, -52483,52484,52484,52485,52485,52486,52486,52487,52488,52488,52489,52489,52490, -52491,52491,52492,52492,52493,52494,52494,52495,52495,52496,52496,52497,52498, -52498,52499,52499,52500,52501,52501,52502,52502,52503,52504,52504,52505,52505, -52506,52507,52507,52508,52508,52509,52509,52510,52511,52511,52512,52512,52513, -52514,52514,52515,52515,52516,52517,52517,52518,52518,52519,52519,52520,52521, -52521,52522,52522,52523,52524,52524,52525,52525,52526,52527,52527,52528,52528, -52529,52529,52530,52531,52531,52532,52532,52533,52534,52534,52535,52535,52536, -52537,52537,52538,52538,52539,52539,52540,52541,52541,52542,52542,52543,52544, -52544,52545,52545,52546,52547,52547,52548,52548,52549,52549,52550,52551,52551, -52552,52552,52553,52554,52554,52555,52555,52556,52557,52557,52558,52558,52559, -52559,52560,52561,52561,52562,52562,52563,52564,52564,52565,52565,52566,52567, -52567,52568,52568,52569,52569,52570,52571,52571,52572,52572,52573,52574,52574, -52575,52575,52576,52577,52577,52578,52578,52579,52579,52580,52581,52581,52582, -52582,52583,52584,52584,52585,52585,52586,52587,52587,52588,52588,52589,52589, -52590,52591,52591,52592,52592,52593,52594,52594,52595,52595,52596,52596,52597, -52598,52598,52599,52599,52600,52601,52601,52602,52602,52603,52604,52604,52605, -52605,52606,52606,52607,52608,52608,52609,52609,52610,52611,52611,52612,52612, -52613,52614,52614,52615,52615,52616,52616,52617,52618,52618,52619,52619,52620, -52621,52621,52622,52622,52623,52624,52624,52625,52625,52626,52626,52627,52628, -52628,52629,52629,52630,52631,52631,52632,52632,52633,52633,52634,52635,52635, -52636,52636,52637,52638,52638,52639,52639,52640,52641,52641,52642,52642,52643, -52643,52644,52645,52645,52646,52646,52647,52648,52648,52649,52649,52650,52651, -52651,52652,52652,52653,52653,52654,52655,52655,52656,52656,52657,52658,52658, -52659,52659,52660,52660,52661,52662,52662,52663,52663,52664,52665,52665,52666, -52666,52667,52668,52668,52669,52669,52670,52670,52671,52672,52672,52673,52673, -52674,52675,52675,52676,52676,52677,52677,52678,52679,52679,52680,52680,52681, -52682,52682,52683,52683,52684,52685,52685,52686,52686,52687,52687,52688,52689, -52689,52690,52690,52691,52692,52692,52693,52693,52694,52694,52695,52696,52696, -52697,52697,52698,52699,52699,52700,52700,52701,52702,52702,52703,52703,52704, -52704,52705,52706,52706,52707,52707,52708,52709,52709,52710,52710,52711,52711, -52712,52713,52713,52714,52714,52715,52716,52716,52717,52717,52718,52719,52719, -52720,52720,52721,52721,52722,52723,52723,52724,52724,52725,52726,52726,52727, -52727,52728,52728,52729,52730,52730,52731,52731,52732,52733,52733,52734,52734, -52735,52735,52736,52737,52737,52738,52738,52739,52740,52740,52741,52741,52742, -52743,52743,52744,52744,52745,52745,52746,52747,52747,52748,52748,52749,52750, -52750,52751,52751,52752,52752,52753,52754,52754,52755,52755,52756,52757,52757, -52758,52758,52759,52759,52760,52761,52761,52762,52762,52763,52764,52764,52765, -52765,52766,52767,52767,52768,52768,52769,52769,52770,52771,52771,52772,52772, -52773,52774,52774,52775,52775,52776,52776,52777,52778,52778,52779,52779,52780, -52781,52781,52782,52782,52783,52783,52784,52785,52785,52786,52786,52787,52788, -52788,52789,52789,52790,52790,52791,52792,52792,52793,52793,52794,52795,52795, -52796,52796,52797,52798,52798,52799,52799,52800,52800,52801,52802,52802,52803, -52803,52804,52805,52805,52806,52806,52807,52807,52808,52809,52809,52810,52810, -52811,52812,52812,52813,52813,52814,52814,52815,52816,52816,52817,52817,52818, -52819,52819,52820,52820,52821,52821,52822,52823,52823,52824,52824,52825,52826, -52826,52827,52827,52828,52828,52829,52830,52830,52831,52831,52832,52833,52833, -52834,52834,52835,52835,52836,52837,52837,52838,52838,52839,52840,52840,52841, -52841,52842,52842,52843,52844,52844,52845,52845,52846,52847,52847,52848,52848, -52849,52849,52850,52851,52851,52852,52852,52853,52854,52854,52855,52855,52856, -52857,52857,52858,52858,52859,52859,52860,52861,52861,52862,52862,52863,52864, -52864,52865,52865,52866,52866,52867,52868,52868,52869,52869,52870,52871,52871, -52872,52872,52873,52873,52874,52875,52875,52876,52876,52877,52878,52878,52879, -52879,52880,52880,52881,52882,52882,52883,52883,52884,52885,52885,52886,52886, -52887,52887,52888,52889,52889,52890,52890,52891,52892,52892,52893,52893,52894, -52894,52895,52896,52896,52897,52897,52898,52899,52899,52900,52900,52901,52901, -52902,52903,52903,52904,52904,52905,52906,52906,52907,52907,52908,52908,52909, -52910,52910,52911,52911,52912,52913,52913,52914,52914,52915,52915,52916,52917, -52917,52918,52918,52919,52919,52920,52921,52921,52922,52922,52923,52924,52924, -52925,52925,52926,52926,52927,52928,52928,52929,52929,52930,52931,52931,52932, -52932,52933,52933,52934,52935,52935,52936,52936,52937,52938,52938,52939,52939, -52940,52940,52941,52942,52942,52943,52943,52944,52945,52945,52946,52946,52947, -52947,52948,52949,52949,52950,52950,52951,52952,52952,52953,52953,52954,52954, -52955,52956,52956,52957,52957,52958,52959,52959,52960,52960,52961,52961,52962, -52963,52963,52964,52964,52965,52966,52966,52967,52967,52968,52968,52969,52970, -52970,52971,52971,52972,52972,52973,52974,52974,52975,52975,52976,52977,52977, -52978,52978,52979,52979,52980,52981,52981,52982,52982,52983,52984,52984,52985, -52985,52986,52986,52987,52988,52988,52989,52989,52990,52991,52991,52992,52992, -52993,52993,52994,52995,52995,52996,52996,52997,52998,52998,52999,52999,53000, -53000,53001,53002,53002,53003,53003,53004,53004,53005,53006,53006,53007,53007, -53008,53009,53009,53010,53010,53011,53011,53012,53013,53013,53014,53014,53015, -53016,53016,53017,53017,53018,53018,53019,53020,53020,53021,53021,53022,53023, -53023,53024,53024,53025,53025,53026,53027,53027,53028,53028,53029,53029,53030, -53031,53031,53032,53032,53033,53034,53034,53035,53035,53036,53036,53037,53038, -53038,53039,53039,53040,53041,53041,53042,53042,53043,53043,53044,53045,53045, -53046,53046,53047,53048,53048,53049,53049,53050,53050,53051,53052,53052,53053, -53053,53054,53054,53055,53056,53056,53057,53057,53058,53059,53059,53060,53060, -53061,53061,53062,53063,53063,53064,53064,53065,53066,53066,53067,53067,53068, -53068,53069,53070,53070,53071,53071,53072,53072,53073,53074,53074,53075,53075, -53076,53077,53077,53078,53078,53079,53079,53080,53081,53081,53082,53082,53083, -53084,53084,53085,53085,53086,53086,53087,53088,53088,53089,53089,53090,53090, -53091,53092,53092,53093,53093,53094,53095,53095,53096,53096,53097,53097,53098, -53099,53099,53100,53100,53101,53102,53102,53103,53103,53104,53104,53105,53106, -53106,53107,53107,53108,53108,53109,53110,53110,53111,53111,53112,53113,53113, -53114,53114,53115,53115,53116,53117,53117,53118,53118,53119,53119,53120,53121, -53121,53122,53122,53123,53124,53124,53125,53125,53126,53126,53127,53128,53128, -53129,53129,53130,53131,53131,53132,53132,53133,53133,53134,53135,53135,53136, -53136,53137,53137,53138,53139,53139,53140,53140,53141,53142,53142,53143,53143, -53144,53144,53145,53146,53146,53147,53147,53148,53148,53149,53150,53150,53151, -53151,53152,53153,53153,53154,53154,53155,53155,53156,53157,53157,53158,53158, -53159,53159,53160,53161,53161,53162,53162,53163,53164,53164,53165,53165,53166, -53166,53167,53168,53168,53169,53169,53170,53170,53171,53172,53172,53173,53173, -53174,53175,53175,53176,53176,53177,53177,53178,53179,53179,53180,53180,53181, -53181,53182,53183,53183,53184,53184,53185,53186,53186,53187,53187,53188,53188, -53189,53190,53190,53191,53191,53192,53192,53193,53194,53194,53195,53195,53196, -53197,53197,53198,53198,53199,53199,53200,53201,53201,53202,53202,53203,53203, -53204,53205,53205,53206,53206,53207,53208,53208,53209,53209,53210,53210,53211, -53212,53212,53213,53213,53214,53214,53215,53216,53216,53217,53217,53218,53219, -53219,53220,53220,53221,53221,53222,53223,53223,53224,53224,53225,53225,53226, -53227,53227,53228,53228,53229,53230,53230,53231,53231,53232,53232,53233,53234, -53234,53235,53235,53236,53236,53237,53238,53238,53239,53239,53240,53241,53241, -53242,53242,53243,53243,53244,53245,53245,53246,53246,53247,53247,53248,53249, -53249,53250,53250,53251,53251,53252,53253,53253,53254,53254,53255,53256,53256, -53257,53257,53258,53258,53259,53260,53260,53261,53261,53262,53262,53263,53264, -53264,53265,53265,53266,53267,53267,53268,53268,53269,53269,53270,53271,53271, -53272,53272,53273,53273,53274,53275,53275,53276,53276,53277,53278,53278,53279, -53279,53280,53280,53281,53282,53282,53283,53283,53284,53284,53285,53286,53286, -53287,53287,53288,53288,53289,53290,53290,53291,53291,53292,53293,53293,53294, -53294,53295,53295,53296,53297,53297,53298,53298,53299,53299,53300,53301,53301, -53302,53302,53303,53303,53304,53305,53305,53306,53306,53307,53308,53308,53309, -53309,53310,53310,53311,53312,53312,53313,53313,53314,53314,53315,53316,53316, -53317,53317,53318,53318,53319,53320,53320,53321,53321,53322,53323,53323,53324, -53324,53325,53325,53326,53327,53327,53328,53328,53329,53329,53330,53331,53331, -53332,53332,53333,53333,53334,53335,53335,53336,53336,53337,53338,53338,53339, -53339,53340,53340,53341,53342,53342,53343,53343,53344,53344,53345,53346,53346, -53347,53347,53348,53348,53349,53350,53350,53351,53351,53352,53353,53353,53354, -53354,53355,53355,53356,53357,53357,53358,53358,53359,53359,53360,53361,53361, -53362,53362,53363,53363,53364,53365,53365,53366,53366,53367,53368,53368,53369, -53369,53370,53370,53371,53372,53372,53373,53373,53374,53374,53375,53376,53376, -53377,53377,53378,53378,53379,53380,53380,53381,53381,53382,53383,53383,53384, -53384,53385,53385,53386,53387,53387,53388,53388,53389,53389,53390,53391,53391, -53392,53392,53393,53393,53394,53395,53395,53396,53396,53397,53397,53398,53399, -53399,53400,53400,53401,53402,53402,53403,53403,53404,53404,53405,53406,53406, -53407,53407,53408,53408,53409,53410,53410,53411,53411,53412,53412,53413,53414, -53414,53415,53415,53416,53416,53417,53418,53418,53419,53419,53420,53421,53421, -53422,53422,53423,53423,53424,53425,53425,53426,53426,53427,53427,53428,53429, -53429,53430,53430,53431,53431,53432,53433,53433,53434,53434,53435,53435,53436, -53437,53437,53438,53438,53439,53440,53440,53441,53441,53442,53442,53443,53444, -53444,53445,53445,53446,53446,53447,53448,53448,53449,53449,53450,53450,53451, -53452,53452,53453,53453,53454,53454,53455,53456,53456,53457,53457,53458,53458, -53459,53460,53460,53461,53461,53462,53463,53463,53464,53464,53465,53465,53466, -53467,53467,53468,53468,53469,53469,53470,53471,53471,53472,53472,53473,53473, -53474,53475,53475,53476,53476,53477,53477,53478,53479,53479,53480,53480,53481, -53481,53482,53483,53483,53484,53484,53485,53486,53486,53487,53487,53488,53488, -53489,53490,53490,53491,53491,53492,53492,53493,53494,53494,53495,53495,53496, -53496,53497,53498,53498,53499,53499,53500,53500,53501,53502,53502,53503,53503, -53504,53504,53505,53506,53506,53507,53507,53508,53508,53509,53510,53510,53511, -53511,53512,53513,53513,53514,53514,53515,53515,53516,53517,53517,53518,53518, -53519,53519,53520,53521,53521,53522,53522,53523,53523,53524,53525,53525,53526, -53526,53527,53527,53528,53529,53529,53530,53530,53531,53531,53532,53533,53533, -53534,53534,53535,53535,53536,53537,53537,53538,53538,53539,53540,53540,53541, -53541,53542,53542,53543,53544,53544,53545,53545,53546,53546,53547,53548,53548, -53549,53549,53550,53550,53551,53552,53552,53553,53553,53554,53554,53555,53556, -53556,53557,53557,53558,53558,53559,53560,53560,53561,53561,53562,53562,53563, -53564,53564,53565,53565,53566,53566,53567,53568,53568,53569,53569,53570,53570, -53571,53572,53572,53573,53573,53574,53574,53575,53576,53576,53577,53577,53578, -53579,53579,53580,53580,53581,53581,53582,53583,53583,53584,53584,53585,53585, -53586,53587,53587,53588,53588,53589,53589,53590,53591,53591,53592,53592,53593, -53593,53594,53595,53595,53596,53596,53597,53597,53598,53599,53599,53600,53600, -53601,53601,53602,53603,53603,53604,53604,53605,53605,53606,53607,53607,53608, -53608,53609,53609,53610,53611,53611,53612,53612,53613,53613,53614,53615,53615, -53616,53616,53617,53617,53618,53619,53619,53620,53620,53621,53621,53622,53623, -53623,53624,53624,53625,53626,53626,53627,53627,53628,53628,53629,53630,53630, -53631,53631,53632,53632,53633,53634,53634,53635,53635,53636,53636,53637,53638, -53638,53639,53639,53640,53640,53641,53642,53642,53643,53643,53644,53644,53645, -53646,53646,53647,53647,53648,53648,53649,53650,53650,53651,53651,53652,53652, -53653,53654,53654,53655,53655,53656,53656,53657,53658,53658,53659,53659,53660, -53660,53661,53662,53662,53663,53663,53664,53664,53665,53666,53666,53667,53667, -53668,53668,53669,53670,53670,53671,53671,53672,53672,53673,53674,53674,53675, -53675,53676,53676,53677,53678,53678,53679,53679,53680,53680,53681,53682,53682, -53683,53683,53684,53684,53685,53686,53686,53687,53687,53688,53688,53689,53690, -53690,53691,53691,53692,53692,53693,53694,53694,53695,53695,53696,53696,53697, -53698,53698,53699,53699,53700,53700,53701,53702,53702,53703,53703,53704,53704, -53705,53706,53706,53707,53707,53708,53708,53709,53710,53710,53711,53711,53712, -53712,53713,53714,53714,53715,53715,53716,53716,53717,53718,53718,53719,53719, -53720,53720,53721,53722,53722,53723,53723,53724,53724,53725,53726,53726,53727, -53727,53728,53728,53729,53730,53730,53731,53731,53732,53732,53733,53734,53734, -53735,53735,53736,53736,53737,53738,53738,53739,53739,53740,53740,53741,53742, -53742,53743,53743,53744,53744,53745,53746,53746,53747,53747,53748,53748,53749, -53750,53750,53751,53751,53752,53752,53753,53754,53754,53755,53755,53756,53756, -53757,53758,53758,53759,53759,53760,53760,53761,53762,53762,53763,53763,53764, -53764,53765,53766,53766,53767,53767,53768,53768,53769,53770,53770,53771,53771, -53772,53772,53773,53774,53774,53775,53775,53776,53776,53777,53778,53778,53779, -53779,53780,53780,53781,53782,53782,53783,53783,53784,53784,53785,53786,53786, -53787,53787,53788,53788,53789,53790,53790,53791,53791,53792,53792,53793,53794, -53794,53795,53795,53796,53796,53797,53798,53798,53799,53799,53800,53800,53801, -53802,53802,53803,53803,53804,53804,53805,53806,53806,53807,53807,53808,53808, -53809,53810,53810,53811,53811,53812,53812,53813,53814,53814,53815,53815,53816, -53816,53817,53818,53818,53819,53819,53820,53820,53821,53821,53822,53823,53823, -53824,53824,53825,53825,53826,53827,53827,53828,53828,53829,53829,53830,53831, -53831,53832,53832,53833,53833,53834,53835,53835,53836,53836,53837,53837,53838, -53839,53839,53840,53840,53841,53841,53842,53843,53843,53844,53844,53845,53845, -53846,53847,53847,53848,53848,53849,53849,53850,53851,53851,53852,53852,53853, -53853,53854,53855,53855,53856,53856,53857,53857,53858,53859,53859,53860,53860, -53861,53861,53862,53863,53863,53864,53864,53865,53865,53866,53867,53867,53868, -53868,53869,53869,53870,53870,53871,53872,53872,53873,53873,53874,53874,53875, -53876,53876,53877,53877,53878,53878,53879,53880,53880,53881,53881,53882,53882, -53883,53884,53884,53885,53885,53886,53886,53887,53888,53888,53889,53889,53890, -53890,53891,53892,53892,53893,53893,53894,53894,53895,53896,53896,53897,53897, -53898,53898,53899,53900,53900,53901,53901,53902,53902,53903,53904,53904,53905, -53905,53906,53906,53907,53907,53908,53909,53909,53910,53910,53911,53911,53912, -53913,53913,53914,53914,53915,53915,53916,53917,53917,53918,53918,53919,53919, -53920,53921,53921,53922,53922,53923,53923,53924,53925,53925,53926,53926,53927, -53927,53928,53929,53929,53930,53930,53931,53931,53932,53933,53933,53934,53934, -53935,53935,53936,53936,53937,53938,53938,53939,53939,53940,53940,53941,53942, -53942,53943,53943,53944,53944,53945,53946,53946,53947,53947,53948,53948,53949, -53950,53950,53951,53951,53952,53952,53953,53954,53954,53955,53955,53956,53956, -53957,53958,53958,53959,53959,53960,53960,53961,53961,53962,53963,53963,53964, -53964,53965,53965,53966,53967,53967,53968,53968,53969,53969,53970,53971,53971, -53972,53972,53973,53973,53974,53975,53975,53976,53976,53977,53977,53978,53979, -53979,53980,53980,53981,53981,53982,53983,53983,53984,53984,53985,53985,53986, -53986,53987,53988,53988,53989,53989,53990,53990,53991,53992,53992,53993,53993, -53994,53994,53995,53996,53996,53997,53997,53998,53998,53999,54000,54000,54001, -54001,54002,54002,54003,54004,54004,54005,54005,54006,54006,54007,54007,54008, -54009,54009,54010,54010,54011,54011,54012,54013,54013,54014,54014,54015,54015, -54016,54017,54017,54018,54018,54019,54019,54020,54021,54021,54022,54022,54023, -54023,54024,54024,54025,54026,54026,54027,54027,54028,54028,54029,54030,54030, -54031,54031,54032,54032,54033,54034,54034,54035,54035,54036,54036,54037,54038, -54038,54039,54039,54040,54040,54041,54042,54042,54043,54043,54044,54044,54045, -54045,54046,54047,54047,54048,54048,54049,54049,54050,54051,54051,54052,54052, -54053,54053,54054,54055,54055,54056,54056,54057,54057,54058,54059,54059,54060, -54060,54061,54061,54062,54062,54063,54064,54064,54065,54065,54066,54066,54067, -54068,54068,54069,54069,54070,54070,54071,54072,54072,54073,54073,54074,54074, -54075,54076,54076,54077,54077,54078,54078,54079,54079,54080,54081,54081,54082, -54082,54083,54083,54084,54085,54085,54086,54086,54087,54087,54088,54089,54089, -54090,54090,54091,54091,54092,54093,54093,54094,54094,54095,54095,54096,54096, -54097,54098,54098,54099,54099,54100,54100,54101,54102,54102,54103,54103,54104, -54104,54105,54106,54106,54107,54107,54108,54108,54109,54109,54110,54111,54111, -54112,54112,54113,54113,54114,54115,54115,54116,54116,54117,54117,54118,54119, -54119,54120,54120,54121,54121,54122,54123,54123,54124,54124,54125,54125,54126, -54126,54127,54128,54128,54129,54129,54130,54130,54131,54132,54132,54133,54133, -54134,54134,54135,54136,54136,54137,54137,54138,54138,54139,54139,54140,54141, -54141,54142,54142,54143,54143,54144,54145,54145,54146,54146,54147,54147,54148, -54149,54149,54150,54150,54151,54151,54152,54152,54153,54154,54154,54155,54155, -54156,54156,54157,54158,54158,54159,54159,54160,54160,54161,54162,54162,54163, -54163,54164,54164,54165,54165,54166,54167,54167,54168,54168,54169,54169,54170, -54171,54171,54172,54172,54173,54173,54174,54175,54175,54176,54176,54177,54177, -54178,54178,54179,54180,54180,54181,54181,54182,54182,54183,54184,54184,54185, -54185,54186,54186,54187,54188,54188,54189,54189,54190,54190,54191,54191,54192, -54193,54193,54194,54194,54195,54195,54196,54197,54197,54198,54198,54199,54199, -54200,54201,54201,54202,54202,54203,54203,54204,54204,54205,54206,54206,54207, -54207,54208,54208,54209,54210,54210,54211,54211,54212,54212,54213,54214,54214, -54215,54215,54216,54216,54217,54217,54218,54219,54219,54220,54220,54221,54221, -54222,54223,54223,54224,54224,54225,54225,54226,54227,54227,54228,54228,54229, -54229,54230,54230,54231,54232,54232,54233,54233,54234,54234,54235,54236,54236, -54237,54237,54238,54238,54239,54239,54240,54241,54241,54242,54242,54243,54243, -54244,54245,54245,54246,54246,54247,54247,54248,54249,54249,54250,54250,54251, -54251,54252,54252,54253,54254,54254,54255,54255,54256,54256,54257,54258,54258, -54259,54259,54260,54260,54261,54261,54262,54263,54263,54264,54264,54265,54265, -54266,54267,54267,54268,54268,54269,54269,54270,54271,54271,54272,54272,54273, -54273,54274,54274,54275,54276,54276,54277,54277,54278,54278,54279,54280,54280, -54281,54281,54282,54282,54283,54283,54284,54285,54285,54286,54286,54287,54287, -54288,54289,54289,54290,54290,54291,54291,54292,54292,54293,54294,54294,54295, -54295,54296,54296,54297,54298,54298,54299,54299,54300,54300,54301,54302,54302, -54303,54303,54304,54304,54305,54305,54306,54307,54307,54308,54308,54309,54309, -54310,54311,54311,54312,54312,54313,54313,54314,54314,54315,54316,54316,54317, -54317,54318,54318,54319,54320,54320,54321,54321,54322,54322,54323,54323,54324, -54325,54325,54326,54326,54327,54327,54328,54329,54329,54330,54330,54331,54331, -54332,54332,54333,54334,54334,54335,54335,54336,54336,54337,54338,54338,54339, -54339,54340,54340,54341,54341,54342,54343,54343,54344,54344,54345,54345,54346, -54347,54347,54348,54348,54349,54349,54350,54350,54351,54352,54352,54353,54353, -54354,54354,54355,54356,54356,54357,54357,54358,54358,54359,54360,54360,54361, -54361,54362,54362,54363,54363,54364,54365,54365,54366,54366,54367,54367,54368, -54369,54369,54370,54370,54371,54371,54372,54372,54373,54374,54374,54375,54375, -54376,54376,54377,54378,54378,54379,54379,54380,54380,54381,54381,54382,54383, -54383,54384,54384,54385,54385,54386,54386,54387,54388,54388,54389,54389,54390, -54390,54391,54392,54392,54393,54393,54394,54394,54395,54395,54396,54397,54397, -54398,54398,54399,54399,54400,54401,54401,54402,54402,54403,54403,54404,54404, -54405,54406,54406,54407,54407,54408,54408,54409,54410,54410,54411,54411,54412, -54412,54413,54413,54414,54415,54415,54416,54416,54417,54417,54418,54419,54419, -54420,54420,54421,54421,54422,54422,54423,54424,54424,54425,54425,54426,54426, -54427,54428,54428,54429,54429,54430,54430,54431,54431,54432,54433,54433,54434, -54434,54435,54435,54436,54437,54437,54438,54438,54439,54439,54440,54440,54441, -54442,54442,54443,54443,54444,54444,54445,54445,54446,54447,54447,54448,54448, -54449,54449,54450,54451,54451,54452,54452,54453,54453,54454,54454,54455,54456, -54456,54457,54457,54458,54458,54459,54460,54460,54461,54461,54462,54462,54463, -54463,54464,54465,54465,54466,54466,54467,54467,54468,54469,54469,54470,54470, -54471,54471,54472,54472,54473,54474,54474,54475,54475,54476,54476,54477,54477, -54478,54479,54479,54480,54480,54481,54481,54482,54483,54483,54484,54484,54485, -54485,54486,54486,54487,54488,54488,54489,54489,54490,54490,54491,54492,54492, -54493,54493,54494,54494,54495,54495,54496,54497,54497,54498,54498,54499,54499, -54500,54500,54501,54502,54502,54503,54503,54504,54504,54505,54506,54506,54507, -54507,54508,54508,54509,54509,54510,54511,54511,54512,54512,54513,54513,54514, -54514,54515,54516,54516,54517,54517,54518,54518,54519,54520,54520,54521,54521, -54522,54522,54523,54523,54524,54525,54525,54526,54526,54527,54527,54528,54529, -54529,54530,54530,54531,54531,54532,54532,54533,54534,54534,54535,54535,54536, -54536,54537,54537,54538,54539,54539,54540,54540,54541,54541,54542,54543,54543, -54544,54544,54545,54545,54546,54546,54547,54548,54548,54549,54549,54550,54550, -54551,54551,54552,54553,54553,54554,54554,54555,54555,54556,54557,54557,54558, -54558,54559,54559,54560,54560,54561,54562,54562,54563,54563,54564,54564,54565, -54565,54566,54567,54567,54568,54568,54569,54569,54570,54571,54571,54572,54572, -54573,54573,54574,54574,54575,54576,54576,54577,54577,54578,54578,54579,54579, -54580,54581,54581,54582,54582,54583,54583,54584,54585,54585,54586,54586,54587, -54587,54588,54588,54589,54590,54590,54591,54591,54592,54592,54593,54593,54594, -54595,54595,54596,54596,54597,54597,54598,54598,54599,54600,54600,54601,54601, -54602,54602,54603,54604,54604,54605,54605,54606,54606,54607,54607,54608,54609, -54609,54610,54610,54611,54611,54612,54612,54613,54614,54614,54615,54615,54616, -54616,54617,54618,54618,54619,54619,54620,54620,54621,54621,54622,54623,54623, -54624,54624,54625,54625,54626,54626,54627,54628,54628,54629,54629,54630,54630, -54631,54631,54632,54633,54633,54634,54634,54635,54635,54636,54637,54637,54638, -54638,54639,54639,54640,54640,54641,54642,54642,54643,54643,54644,54644,54645, -54645,54646,54647,54647,54648,54648,54649,54649,54650,54650,54651,54652,54652, -54653,54653,54654,54654,54655,54656,54656,54657,54657,54658,54658,54659,54659, -54660,54661,54661,54662,54662,54663,54663,54664,54664,54665,54666,54666,54667, -54667,54668,54668,54669,54669,54670,54671,54671,54672,54672,54673,54673,54674, -54675,54675,54676,54676,54677,54677,54678,54678,54679,54680,54680,54681,54681, -54682,54682,54683,54683,54684,54685,54685,54686,54686,54687,54687,54688,54688, -54689,54690,54690,54691,54691,54692,54692,54693,54693,54694,54695,54695,54696, -54696,54697,54697,54698,54699,54699,54700,54700,54701,54701,54702,54702,54703, -54704,54704,54705,54705,54706,54706,54707,54707,54708,54709,54709,54710,54710, -54711,54711,54712,54712,54713,54714,54714,54715,54715,54716,54716,54717,54717, -54718,54719,54719,54720,54720,54721,54721,54722,54723,54723,54724,54724,54725, -54725,54726,54726,54727,54728,54728,54729,54729,54730,54730,54731,54731,54732, -54733,54733,54734,54734,54735,54735,54736,54736,54737,54738,54738,54739,54739, -54740,54740,54741,54741,54742,54743,54743,54744,54744,54745,54745,54746,54746, -54747,54748,54748,54749,54749,54750,54750,54751,54751,54752,54753,54753,54754, -54754,54755,54755,54756,54757,54757,54758,54758,54759,54759,54760,54760,54761, -54762,54762,54763,54763,54764,54764,54765,54765,54766,54767,54767,54768,54768, -54769,54769,54770,54770,54771,54772,54772,54773,54773,54774,54774,54775,54775, -54776,54777,54777,54778,54778,54779,54779,54780,54780,54781,54782,54782,54783, -54783,54784,54784,54785,54785,54786,54787,54787,54788,54788,54789,54789,54790, -54790,54791,54792,54792,54793,54793,54794,54794,54795,54796,54796,54797,54797, -54798,54798,54799,54799,54800,54801,54801,54802,54802,54803,54803,54804,54804, -54805,54806,54806,54807,54807,54808,54808,54809,54809,54810,54811,54811,54812, -54812,54813,54813,54814,54814,54815,54816,54816,54817,54817,54818,54818,54819, -54819,54820,54821,54821,54822,54822,54823,54823,54824,54824,54825,54826,54826, -54827,54827,54828,54828,54829,54829,54830,54831,54831,54832,54832,54833,54833, -54834,54834,54835,54836,54836,54837,54837,54838,54838,54839,54839,54840,54841, -54841,54842,54842,54843,54843,54844,54844,54845,54846,54846,54847,54847,54848, -54848,54849,54849,54850,54851,54851,54852,54852,54853,54853,54854,54854,54855, -54856,54856,54857,54857,54858,54858,54859,54859,54860,54861,54861,54862,54862, -54863,54863,54864,54864,54865,54866,54866,54867,54867,54868,54868,54869,54869, -54870,54871,54871,54872,54872,54873,54873,54874,54874,54875,54876,54876,54877, -54877,54878,54878,54879,54879,54880,54881,54881,54882,54882,54883,54883,54884, -54884,54885,54886,54886,54887,54887,54888,54888,54889,54889,54890,54891,54891, -54892,54892,54893,54893,54894,54894,54895,54896,54896,54897,54897,54898,54898, -54899,54899,54900,54901,54901,54902,54902,54903,54903,54904,54904,54905,54906, -54906,54907,54907,54908,54908,54909,54909,54910,54911,54911,54912,54912,54913, -54913,54914,54914,54915,54916,54916,54917,54917,54918,54918,54919,54919,54920, -54921,54921,54922,54922,54923,54923,54924,54924,54925,54926,54926,54927,54927, -54928,54928,54929,54929,54930,54931,54931,54932,54932,54933,54933,54934,54934, -54935,54936,54936,54937,54937,54938,54938,54939,54939,54940,54941,54941,54942, -54942,54943,54943,54944,54944,54945,54946,54946,54947,54947,54948,54948,54949, -54949,54950,54951,54951,54952,54952,54953,54953,54954,54954,54955,54956,54956, -54957,54957,54958,54958,54959,54959,54960,54961,54961,54962,54962,54963,54963, -54964,54964,54965,54966,54966,54967,54967,54968,54968,54969,54969,54970,54971, -54971,54972,54972,54973,54973,54974,54974,54975,54976,54976,54977,54977,54978, -54978,54979,54979,54980,54980,54981,54982,54982,54983,54983,54984,54984,54985, -54985,54986,54987,54987,54988,54988,54989,54989,54990,54990,54991,54992,54992, -54993,54993,54994,54994,54995,54995,54996,54997,54997,54998,54998,54999,54999, -55000,55000,55001,55002,55002,55003,55003,55004,55004,55005,55005,55006,55007, -55007,55008,55008,55009,55009,55010,55010,55011,55012,55012,55013,55013,55014, -55014,55015,55015,55016,55017,55017,55018,55018,55019,55019,55020,55020,55021, -55021,55022,55023,55023,55024,55024,55025,55025,55026,55026,55027,55028,55028, -55029,55029,55030,55030,55031,55031,55032,55033,55033,55034,55034,55035,55035, -55036,55036,55037,55038,55038,55039,55039,55040,55040,55041,55041,55042,55043, -55043,55044,55044,55045,55045,55046,55046,55047,55048,55048,55049,55049,55050, -55050,55051,55051,55052,55052,55053,55054,55054,55055,55055,55056,55056,55057, -55057,55058,55059,55059,55060,55060,55061,55061,55062,55062,55063,55064,55064, -55065,55065,55066,55066,55067,55067,55068,55069,55069,55070,55070,55071,55071, -55072,55072,55073,55074,55074,55075,55075,55076,55076,55077,55077,55078,55078, -55079,55080,55080,55081,55081,55082,55082,55083,55083,55084,55085,55085,55086, -55086,55087,55087,55088,55088,55089,55090,55090,55091,55091,55092,55092,55093, -55093,55094,55095,55095,55096,55096,55097,55097,55098,55098,55099,55100,55100, -55101,55101,55102,55102,55103,55103,55104,55104,55105,55106,55106,55107,55107, -55108,55108,55109,55109,55110,55111,55111,55112,55112,55113,55113,55114,55114, -55115,55116,55116,55117,55117,55118,55118,55119,55119,55120,55121,55121,55122, -55122,55123,55123,55124,55124,55125,55125,55126,55127,55127,55128,55128,55129, -55129,55130,55130,55131,55132,55132,55133,55133,55134,55134,55135,55135,55136, -55137,55137,55138,55138,55139,55139,55140,55140,55141,55141,55142,55143,55143, -55144,55144,55145,55145,55146,55146,55147,55148,55148,55149,55149,55150,55150, -55151,55151,55152,55153,55153,55154,55154,55155,55155,55156,55156,55157,55158, -55158,55159,55159,55160,55160,55161,55161,55162,55162,55163,55164,55164,55165, -55165,55166,55166,55167,55167,55168,55169,55169,55170,55170,55171,55171,55172, -55172,55173,55174,55174,55175,55175,55176,55176,55177,55177,55178,55178,55179, -55180,55180,55181,55181,55182,55182,55183,55183,55184,55185,55185,55186,55186, -55187,55187,55188,55188,55189,55190,55190,55191,55191,55192,55192,55193,55193, -55194,55194,55195,55196,55196,55197,55197,55198,55198,55199,55199,55200,55201, -55201,55202,55202,55203,55203,55204,55204,55205,55205,55206,55207,55207,55208, -55208,55209,55209,55210,55210,55211,55212,55212,55213,55213,55214,55214,55215, -55215,55216,55217,55217,55218,55218,55219,55219,55220,55220,55221,55221,55222, -55223,55223,55224,55224,55225,55225,55226,55226,55227,55228,55228,55229,55229, -55230,55230,55231,55231,55232,55233,55233,55234,55234,55235,55235,55236,55236, -55237,55237,55238,55239,55239,55240,55240,55241,55241,55242,55242,55243,55244, -55244,55245,55245,55246,55246,55247,55247,55248,55248,55249,55250,55250,55251, -55251,55252,55252,55253,55253,55254,55255,55255,55256,55256,55257,55257,55258, -55258,55259,55259,55260,55261,55261,55262,55262,55263,55263,55264,55264,55265, -55266,55266,55267,55267,55268,55268,55269,55269,55270,55271,55271,55272,55272, -55273,55273,55274,55274,55275,55275,55276,55277,55277,55278,55278,55279,55279, -55280,55280,55281,55282,55282,55283,55283,55284,55284,55285,55285,55286,55286, -55287,55288,55288,55289,55289,55290,55290,55291,55291,55292,55293,55293,55294, -55294,55295,55295,55296,55296,55297,55297,55298,55299,55299,55300,55300,55301, -55301,55302,55302,55303,55304,55304,55305,55305,55306,55306,55307,55307,55308, -55308,55309,55310,55310,55311,55311,55312,55312,55313,55313,55314,55315,55315, -55316,55316,55317,55317,55318,55318,55319,55319,55320,55321,55321,55322,55322, -55323,55323,55324,55324,55325,55326,55326,55327,55327,55328,55328,55329,55329, -55330,55330,55331,55332,55332,55333,55333,55334,55334,55335,55335,55336,55337, -55337,55338,55338,55339,55339,55340,55340,55341,55341,55342,55343,55343,55344, -55344,55345,55345,55346,55346,55347,55348,55348,55349,55349,55350,55350,55351, -55351,55352,55352,55353,55354,55354,55355,55355,55356,55356,55357,55357,55358, -55358,55359,55360,55360,55361,55361,55362,55362,55363,55363,55364,55365,55365, -55366,55366,55367,55367,55368,55368,55369,55369,55370,55371,55371,55372,55372, -55373,55373,55374,55374,55375,55376,55376,55377,55377,55378,55378,55379,55379, -55380,55380,55381,55382,55382,55383,55383,55384,55384,55385,55385,55386,55387, -55387,55388,55388,55389,55389,55390,55390,55391,55391,55392,55393,55393,55394, -55394,55395,55395,55396,55396,55397,55397,55398,55399,55399,55400,55400,55401, -55401,55402,55402,55403,55404,55404,55405,55405,55406,55406,55407,55407,55408, -55408,55409,55410,55410,55411,55411,55412,55412,55413,55413,55414,55414,55415, -55416,55416,55417,55417,55418,55418,55419,55419,55420,55421,55421,55422,55422, -55423,55423,55424,55424,55425,55425,55426,55427,55427,55428,55428,55429,55429, -55430,55430,55431,55431,55432,55433,55433,55434,55434,55435,55435,55436,55436, -55437,55438,55438,55439,55439,55440,55440,55441,55441,55442,55442,55443,55444, -55444,55445,55445,55446,55446,55447,55447,55448,55448,55449,55450,55450,55451, -55451,55452,55452,55453,55453,55454,55455,55455,55456,55456,55457,55457,55458, -55458,55459,55459,55460,55461,55461,55462,55462,55463,55463,55464,55464,55465, -55465,55466,55467,55467,55468,55468,55469,55469,55470,55470,55471,55472,55472, -55473,55473,55474,55474,55475,55475,55476,55476,55477,55478,55478,55479,55479, -55480,55480,55481,55481,55482,55482,55483,55484,55484,55485,55485,55486,55486, -55487,55487,55488,55488,55489,55490,55490,55491,55491,55492,55492,55493,55493, -55494,55495,55495,55496,55496,55497,55497,55498,55498,55499,55499,55500,55501, -55501,55502,55502,55503,55503,55504,55504,55505,55505,55506,55507,55507,55508, -55508,55509,55509,55510,55510,55511,55511,55512,55513,55513,55514,55514,55515, -55515,55516,55516,55517,55518,55518,55519,55519,55520,55520,55521,55521,55522, -55522,55523,55524,55524,55525,55525,55526,55526,55527,55527,55528,55528,55529, -55530,55530,55531,55531,55532,55532,55533,55533,55534,55534,55535,55536,55536, -55537,55537,55538,55538,55539,55539,55540,55540,55541,55542,55542,55543,55543, -55544,55544,55545,55545,55546,55546,55547,55548,55548,55549,55549,55550,55550, -55551,55551,55552,55553,55553,55554,55554,55555,55555,55556,55556,55557,55557, -55558,55559,55559,55560,55560,55561,55561,55562,55562,55563,55563,55564,55565, -55565,55566,55566,55567,55567,55568,55568,55569,55569,55570,55571,55571,55572, -55572,55573,55573,55574,55574,55575,55575,55576,55577,55577,55578,55578,55579, -55579,55580,55580,55581,55581,55582,55583,55583,55584,55584,55585,55585,55586, -55586,55587,55587,55588,55589,55589,55590,55590,55591,55591,55592,55592,55593, -55594,55594,55595,55595,55596,55596,55597,55597,55598,55598,55599,55600,55600, -55601,55601,55602,55602,55603,55603,55604,55604,55605,55606,55606,55607,55607, -55608,55608,55609,55609,55610,55610,55611,55612,55612,55613,55613,55614,55614, -55615,55615,55616,55616,55617,55618,55618,55619,55619,55620,55620,55621,55621, -55622,55622,55623,55624,55624,55625,55625,55626,55626,55627,55627,55628,55628, -55629,55630,55630,55631,55631,55632,55632,55633,55633,55634,55634,55635,55636, -55636,55637,55637,55638,55638,55639,55639,55640,55640,55641,55642,55642,55643, -55643,55644,55644,55645,55645,55646,55646,55647,55648,55648,55649,55649,55650, -55650,55651,55651,55652,55652,55653,55654,55654,55655,55655,55656,55656,55657, -55657,55658,55658,55659,55660,55660,55661,55661,55662,55662,55663,55663,55664, -55664,55665,55666,55666,55667,55667,55668,55668,55669,55669,55670,55670,55671, -55672,55672,55673,55673,55674,55674,55675,55675,55676,55676,55677,55678,55678, -55679,55679,55680,55680,55681,55681,55682,55682,55683,55684,55684,55685,55685, -55686,55686,55687,55687,55688,55688,55689,55690,55690,55691,55691,55692,55692, -55693,55693,55694,55694,55695,55696,55696,55697,55697,55698,55698,55699,55699, -55700,55700,55701,55702,55702,55703,55703,55704,55704,55705,55705,55706,55706, -55707,55708,55708,55709,55709,55710,55710,55711,55711,55712,55712,55713,55714, -55714,55715,55715,55716,55716,55717,55717,55718,55718,55719,55720,55720,55721, -55721,55722,55722,55723,55723,55724,55724,55725,55726,55726,55727,55727,55728, -55728,55729,55729,55730,55730,55731,55731,55732,55733,55733,55734,55734,55735, -55735,55736,55736,55737,55737,55738,55739,55739,55740,55740,55741,55741,55742, -55742,55743,55743,55744,55745,55745,55746,55746,55747,55747,55748,55748,55749, -55749,55750,55751,55751,55752,55752,55753,55753,55754,55754,55755,55755,55756, -55757,55757,55758,55758,55759,55759,55760,55760,55761,55761,55762,55763,55763, -55764,55764,55765,55765,55766,55766,55767,55767,55768,55769,55769,55770,55770, -55771,55771,55772,55772,55773,55773,55774,55774,55775,55776,55776,55777,55777, -55778,55778,55779,55779,55780,55780,55781,55782,55782,55783,55783,55784,55784, -55785,55785,55786,55786,55787,55788,55788,55789,55789,55790,55790,55791,55791, -55792,55792,55793,55794,55794,55795,55795,55796,55796,55797,55797,55798,55798, -55799,55800,55800,55801,55801,55802,55802,55803,55803,55804,55804,55805,55805, -55806,55807,55807,55808,55808,55809,55809,55810,55810,55811,55811,55812,55813, -55813,55814,55814,55815,55815,55816,55816,55817,55817,55818,55819,55819,55820, -55820,55821,55821,55822,55822,55823,55823,55824,55825,55825,55826,55826,55827, -55827,55828,55828,55829,55829,55830,55830,55831,55832,55832,55833,55833,55834, -55834,55835,55835,55836,55836,55837,55838,55838,55839,55839,55840,55840,55841, -55841,55842,55842,55843,55844,55844,55845,55845,55846,55846,55847,55847,55848, -55848,55849,55849,55850,55851,55851,55852,55852,55853,55853,55854,55854,55855, -55855,55856,55857,55857,55858,55858,55859,55859,55860,55860,55861,55861,55862, -55863,55863,55864,55864,55865,55865,55866,55866,55867,55867,55868,55868,55869, -55870,55870,55871,55871,55872,55872,55873,55873,55874,55874,55875,55876,55876, -55877,55877,55878,55878,55879,55879,55880,55880,55881,55882,55882,55883,55883, -55884,55884,55885,55885,55886,55886,55887,55887,55888,55889,55889,55890,55890, -55891,55891,55892,55892,55893,55893,55894,55895,55895,55896,55896,55897,55897, -55898,55898,55899,55899,55900,55901,55901,55902,55902,55903,55903,55904,55904, -55905,55905,55906,55906,55907,55908,55908,55909,55909,55910,55910,55911,55911, -55912,55912,55913,55914,55914,55915,55915,55916,55916,55917,55917,55918,55918, -55919,55919,55920,55921,55921,55922,55922,55923,55923,55924,55924,55925,55925, -55926,55927,55927,55928,55928,55929,55929,55930,55930,55931,55931,55932,55932, -55933,55934,55934,55935,55935,55936,55936,55937,55937,55938,55938,55939,55940, -55940,55941,55941,55942,55942,55943,55943,55944,55944,55945,55945,55946,55947, -55947,55948,55948,55949,55949,55950,55950,55951,55951,55952,55953,55953,55954, -55954,55955,55955,55956,55956,55957,55957,55958,55958,55959,55960,55960,55961, -55961,55962,55962,55963,55963,55964,55964,55965,55966,55966,55967,55967,55968, -55968,55969,55969,55970,55970,55971,55971,55972,55973,55973,55974,55974,55975, -55975,55976,55976,55977,55977,55978,55979,55979,55980,55980,55981,55981,55982, -55982,55983,55983,55984,55984,55985,55986,55986,55987,55987,55988,55988,55989, -55989,55990,55990,55991,55992,55992,55993,55993,55994,55994,55995,55995,55996, -55996,55997,55997,55998,55999,55999,56000,56000,56001,56001,56002,56002,56003, -56003,56004,56005,56005,56006,56006,56007,56007,56008,56008,56009,56009,56010, -56010,56011,56012,56012,56013,56013,56014,56014,56015,56015,56016,56016,56017, -56017,56018,56019,56019,56020,56020,56021,56021,56022,56022,56023,56023,56024, -56025,56025,56026,56026,56027,56027,56028,56028,56029,56029,56030,56030,56031, -56032,56032,56033,56033,56034,56034,56035,56035,56036,56036,56037,56037,56038, -56039,56039,56040,56040,56041,56041,56042,56042,56043,56043,56044,56045,56045, -56046,56046,56047,56047,56048,56048,56049,56049,56050,56050,56051,56052,56052, -56053,56053,56054,56054,56055,56055,56056,56056,56057,56057,56058,56059,56059, -56060,56060,56061,56061,56062,56062,56063,56063,56064,56065,56065,56066,56066, -56067,56067,56068,56068,56069,56069,56070,56070,56071,56072,56072,56073,56073, -56074,56074,56075,56075,56076,56076,56077,56077,56078,56079,56079,56080,56080, -56081,56081,56082,56082,56083,56083,56084,56085,56085,56086,56086,56087,56087, -56088,56088,56089,56089,56090,56090,56091,56092,56092,56093,56093,56094,56094, -56095,56095,56096,56096,56097,56097,56098,56099,56099,56100,56100,56101,56101, -56102,56102,56103,56103,56104,56104,56105,56106,56106,56107,56107,56108,56108, -56109,56109,56110,56110,56111,56111,56112,56113,56113,56114,56114,56115,56115, -56116,56116,56117,56117,56118,56119,56119,56120,56120,56121,56121,56122,56122, -56123,56123,56124,56124,56125,56126,56126,56127,56127,56128,56128,56129,56129, -56130,56130,56131,56131,56132,56133,56133,56134,56134,56135,56135,56136,56136, -56137,56137,56138,56138,56139,56140,56140,56141,56141,56142,56142,56143,56143, -56144,56144,56145,56145,56146,56147,56147,56148,56148,56149,56149,56150,56150, -56151,56151,56152,56152,56153,56154,56154,56155,56155,56156,56156,56157,56157, -56158,56158,56159,56160,56160,56161,56161,56162,56162,56163,56163,56164,56164, -56165,56165,56166,56167,56167,56168,56168,56169,56169,56170,56170,56171,56171, -56172,56172,56173,56174,56174,56175,56175,56176,56176,56177,56177,56178,56178, -56179,56179,56180,56181,56181,56182,56182,56183,56183,56184,56184,56185,56185, -56186,56186,56187,56188,56188,56189,56189,56190,56190,56191,56191,56192,56192, -56193,56193,56194,56195,56195,56196,56196,56197,56197,56198,56198,56199,56199, -56200,56200,56201,56202,56202,56203,56203,56204,56204,56205,56205,56206,56206, -56207,56207,56208,56209,56209,56210,56210,56211,56211,56212,56212,56213,56213, -56214,56214,56215,56216,56216,56217,56217,56218,56218,56219,56219,56220,56220, -56221,56221,56222,56223,56223,56224,56224,56225,56225,56226,56226,56227,56227, -56228,56228,56229,56230,56230,56231,56231,56232,56232,56233,56233,56234,56234, -56235,56235,56236,56237,56237,56238,56238,56239,56239,56240,56240,56241,56241, -56242,56242,56243,56244,56244,56245,56245,56246,56246,56247,56247,56248,56248, -56249,56249,56250,56251,56251,56252,56252,56253,56253,56254,56254,56255,56255, -56256,56256,56257,56257,56258,56259,56259,56260,56260,56261,56261,56262,56262, -56263,56263,56264,56264,56265,56266,56266,56267,56267,56268,56268,56269,56269, -56270,56270,56271,56271,56272,56273,56273,56274,56274,56275,56275,56276,56276, -56277,56277,56278,56278,56279,56280,56280,56281,56281,56282,56282,56283,56283, -56284,56284,56285,56285,56286,56287,56287,56288,56288,56289,56289,56290,56290, -56291,56291,56292,56292,56293,56294,56294,56295,56295,56296,56296,56297,56297, -56298,56298,56299,56299,56300,56301,56301,56302,56302,56303,56303,56304,56304, -56305,56305,56306,56306,56307,56307,56308,56309,56309,56310,56310,56311,56311, -56312,56312,56313,56313,56314,56314,56315,56316,56316,56317,56317,56318,56318, -56319,56319,56320,56320,56321,56321,56322,56323,56323,56324,56324,56325,56325, -56326,56326,56327,56327,56328,56328,56329,56330,56330,56331,56331,56332,56332, -56333,56333,56334,56334,56335,56335,56336,56336,56337,56338,56338,56339,56339, -56340,56340,56341,56341,56342,56342,56343,56343,56344,56345,56345,56346,56346, -56347,56347,56348,56348,56349,56349,56350,56350,56351,56352,56352,56353,56353, -56354,56354,56355,56355,56356,56356,56357,56357,56358,56358,56359,56360,56360, -56361,56361,56362,56362,56363,56363,56364,56364,56365,56365,56366,56367,56367, -56368,56368,56369,56369,56370,56370,56371,56371,56372,56372,56373,56374,56374, -56375,56375,56376,56376,56377,56377,56378,56378,56379,56379,56380,56380,56381, -56382,56382,56383,56383,56384,56384,56385,56385,56386,56386,56387,56387,56388, -56389,56389,56390,56390,56391,56391,56392,56392,56393,56393,56394,56394,56395, -56395,56396,56397,56397,56398,56398,56399,56399,56400,56400,56401,56401,56402, -56402,56403,56404,56404,56405,56405,56406,56406,56407,56407,56408,56408,56409, -56409,56410,56411,56411,56412,56412,56413,56413,56414,56414,56415,56415,56416, -56416,56417,56417,56418,56419,56419,56420,56420,56421,56421,56422,56422,56423, -56423,56424,56424,56425,56426,56426,56427,56427,56428,56428,56429,56429,56430, -56430,56431,56431,56432,56432,56433,56434,56434,56435,56435,56436,56436,56437, -56437,56438,56438,56439,56439,56440,56441,56441,56442,56442,56443,56443,56444, -56444,56445,56445,56446,56446,56447,56447,56448,56449,56449,56450,56450,56451, -56451,56452,56452,56453,56453,56454,56454,56455,56456,56456,56457,56457,56458, -56458,56459,56459,56460,56460,56461,56461,56462,56462,56463,56464,56464,56465, -56465,56466,56466,56467,56467,56468,56468,56469,56469,56470,56470,56471,56472, -56472,56473,56473,56474,56474,56475,56475,56476,56476,56477,56477,56478,56479, -56479,56480,56480,56481,56481,56482,56482,56483,56483,56484,56484,56485,56485, -56486,56487,56487,56488,56488,56489,56489,56490,56490,56491,56491,56492,56492, -56493,56493,56494,56495,56495,56496,56496,56497,56497,56498,56498,56499,56499, -56500,56500,56501,56502,56502,56503,56503,56504,56504,56505,56505,56506,56506, -56507,56507,56508,56508,56509,56510,56510,56511,56511,56512,56512,56513,56513, -56514,56514,56515,56515,56516,56516,56517,56518,56518,56519,56519,56520,56520, -56521,56521,56522,56522,56523,56523,56524,56525,56525,56526,56526,56527,56527, -56528,56528,56529,56529,56530,56530,56531,56531,56532,56533,56533,56534,56534, -56535,56535,56536,56536,56537,56537,56538,56538,56539,56539,56540,56541,56541, -56542,56542,56543,56543,56544,56544,56545,56545,56546,56546,56547,56547,56548, -56549,56549,56550,56550,56551,56551,56552,56552,56553,56553,56554,56554,56555, -56555,56556,56557,56557,56558,56558,56559,56559,56560,56560,56561,56561,56562, -56562,56563,56564,56564,56565,56565,56566,56566,56567,56567,56568,56568,56569, -56569,56570,56570,56571,56572,56572,56573,56573,56574,56574,56575,56575,56576, -56576,56577,56577,56578,56578,56579,56580,56580,56581,56581,56582,56582,56583, -56583,56584,56584,56585,56585,56586,56586,56587,56588,56588,56589,56589,56590, -56590,56591,56591,56592,56592,56593,56593,56594,56594,56595,56596,56596,56597, -56597,56598,56598,56599,56599,56600,56600,56601,56601,56602,56602,56603,56604, -56604,56605,56605,56606,56606,56607,56607,56608,56608,56609,56609,56610,56610, -56611,56612,56612,56613,56613,56614,56614,56615,56615,56616,56616,56617,56617, -56618,56618,56619,56620,56620,56621,56621,56622,56622,56623,56623,56624,56624, -56625,56625,56626,56626,56627,56628,56628,56629,56629,56630,56630,56631,56631, -56632,56632,56633,56633,56634,56634,56635,56636,56636,56637,56637,56638,56638, -56639,56639,56640,56640,56641,56641,56642,56642,56643,56644,56644,56645,56645, -56646,56646,56647,56647,56648,56648,56649,56649,56650,56650,56651,56652,56652, -56653,56653,56654,56654,56655,56655,56656,56656,56657,56657,56658,56658,56659, -56660,56660,56661,56661,56662,56662,56663,56663,56664,56664,56665,56665,56666, -56666,56667,56668,56668,56669,56669,56670,56670,56671,56671,56672,56672,56673, -56673,56674,56674,56675,56676,56676,56677,56677,56678,56678,56679,56679,56680, -56680,56681,56681,56682,56682,56683,56683,56684,56685,56685,56686,56686,56687, -56687,56688,56688,56689,56689,56690,56690,56691,56691,56692,56693,56693,56694, -56694,56695,56695,56696,56696,56697,56697,56698,56698,56699,56699,56700,56701, -56701,56702,56702,56703,56703,56704,56704,56705,56705,56706,56706,56707,56707, -56708,56709,56709,56710,56710,56711,56711,56712,56712,56713,56713,56714,56714, -56715,56715,56716,56716,56717,56718,56718,56719,56719,56720,56720,56721,56721, -56722,56722,56723,56723,56724,56724,56725,56726,56726,56727,56727,56728,56728, -56729,56729,56730,56730,56731,56731,56732,56732,56733,56734,56734,56735,56735, -56736,56736,56737,56737,56738,56738,56739,56739,56740,56740,56741,56741,56742, -56743,56743,56744,56744,56745,56745,56746,56746,56747,56747,56748,56748,56749, -56749,56750,56751,56751,56752,56752,56753,56753,56754,56754,56755,56755,56756, -56756,56757,56757,56758,56759,56759,56760,56760,56761,56761,56762,56762,56763, -56763,56764,56764,56765,56765,56766,56766,56767,56768,56768,56769,56769,56770, -56770,56771,56771,56772,56772,56773,56773,56774,56774,56775,56776,56776,56777, -56777,56778,56778,56779,56779,56780,56780,56781,56781,56782,56782,56783,56783, -56784,56785,56785,56786,56786,56787,56787,56788,56788,56789,56789,56790,56790, -56791,56791,56792,56793,56793,56794,56794,56795,56795,56796,56796,56797,56797, -56798,56798,56799,56799,56800,56800,56801,56802,56802,56803,56803,56804,56804, -56805,56805,56806,56806,56807,56807,56808,56808,56809,56810,56810,56811,56811, -56812,56812,56813,56813,56814,56814,56815,56815,56816,56816,56817,56817,56818, -56819,56819,56820,56820,56821,56821,56822,56822,56823,56823,56824,56824,56825, -56825,56826,56827,56827,56828,56828,56829,56829,56830,56830,56831,56831,56832, -56832,56833,56833,56834,56834,56835,56836,56836,56837,56837,56838,56838,56839, -56839,56840,56840,56841,56841,56842,56842,56843,56843,56844,56845,56845,56846, -56846,56847,56847,56848,56848,56849,56849,56850,56850,56851,56851,56852,56853, -56853,56854,56854,56855,56855,56856,56856,56857,56857,56858,56858,56859,56859, -56860,56860,56861,56862,56862,56863,56863,56864,56864,56865,56865,56866,56866, -56867,56867,56868,56868,56869,56869,56870,56871,56871,56872,56872,56873,56873, -56874,56874,56875,56875,56876,56876,56877,56877,56878,56878,56879,56880,56880, -56881,56881,56882,56882,56883,56883,56884,56884,56885,56885,56886,56886,56887, -56887,56888,56889,56889,56890,56890,56891,56891,56892,56892,56893,56893,56894, -56894,56895,56895,56896,56897,56897,56898,56898,56899,56899,56900,56900,56901, -56901,56902,56902,56903,56903,56904,56904,56905,56906,56906,56907,56907,56908, -56908,56909,56909,56910,56910,56911,56911,56912,56912,56913,56913,56914,56915, -56915,56916,56916,56917,56917,56918,56918,56919,56919,56920,56920,56921,56921, -56922,56922,56923,56924,56924,56925,56925,56926,56926,56927,56927,56928,56928, -56929,56929,56930,56930,56931,56931,56932,56933,56933,56934,56934,56935,56935, -56936,56936,56937,56937,56938,56938,56939,56939,56940,56940,56941,56942,56942, -56943,56943,56944,56944,56945,56945,56946,56946,56947,56947,56948,56948,56949, -56949,56950,56951,56951,56952,56952,56953,56953,56954,56954,56955,56955,56956, -56956,56957,56957,56958,56958,56959,56960,56960,56961,56961,56962,56962,56963, -56963,56964,56964,56965,56965,56966,56966,56967,56967,56968,56969,56969,56970, -56970,56971,56971,56972,56972,56973,56973,56974,56974,56975,56975,56976,56976, -56977,56978,56978,56979,56979,56980,56980,56981,56981,56982,56982,56983,56983, -56984,56984,56985,56985,56986,56986,56987,56988,56988,56989,56989,56990,56990, -56991,56991,56992,56992,56993,56993,56994,56994,56995,56995,56996,56997,56997, -56998,56998,56999,56999,57000,57000,57001,57001,57002,57002,57003,57003,57004, -57004,57005,57006,57006,57007,57007,57008,57008,57009,57009,57010,57010,57011, -57011,57012,57012,57013,57013,57014,57015,57015,57016,57016,57017,57017,57018, -57018,57019,57019,57020,57020,57021,57021,57022,57022,57023,57023,57024,57025, -57025,57026,57026,57027,57027,57028,57028,57029,57029,57030,57030,57031,57031, -57032,57032,57033,57034,57034,57035,57035,57036,57036,57037,57037,57038,57038, -57039,57039,57040,57040,57041,57041,57042,57043,57043,57044,57044,57045,57045, -57046,57046,57047,57047,57048,57048,57049,57049,57050,57050,57051,57051,57052, -57053,57053,57054,57054,57055,57055,57056,57056,57057,57057,57058,57058,57059, -57059,57060,57060,57061,57062,57062,57063,57063,57064,57064,57065,57065,57066, -57066,57067,57067,57068,57068,57069,57069,57070,57070,57071,57072,57072,57073, -57073,57074,57074,57075,57075,57076,57076,57077,57077,57078,57078,57079,57079, -57080,57081,57081,57082,57082,57083,57083,57084,57084,57085,57085,57086,57086, -57087,57087,57088,57088,57089,57089,57090,57091,57091,57092,57092,57093,57093, -57094,57094,57095,57095,57096,57096,57097,57097,57098,57098,57099,57100,57100, -57101,57101,57102,57102,57103,57103,57104,57104,57105,57105,57106,57106,57107, -57107,57108,57108,57109,57110,57110,57111,57111,57112,57112,57113,57113,57114, -57114,57115,57115,57116,57116,57117,57117,57118,57118,57119,57120,57120,57121, -57121,57122,57122,57123,57123,57124,57124,57125,57125,57126,57126,57127,57127, -57128,57129,57129,57130,57130,57131,57131,57132,57132,57133,57133,57134,57134, -57135,57135,57136,57136,57137,57137,57138,57139,57139,57140,57140,57141,57141, -57142,57142,57143,57143,57144,57144,57145,57145,57146,57146,57147,57147,57148, -57149,57149,57150,57150,57151,57151,57152,57152,57153,57153,57154,57154,57155, -57155,57156,57156,57157,57157,57158,57159,57159,57160,57160,57161,57161,57162, -57162,57163,57163,57164,57164,57165,57165,57166,57166,57167,57167,57168,57169, -57169,57170,57170,57171,57171,57172,57172,57173,57173,57174,57174,57175,57175, -57176,57176,57177,57177,57178,57179,57179,57180,57180,57181,57181,57182,57182, -57183,57183,57184,57184,57185,57185,57186,57186,57187,57187,57188,57189,57189, -57190,57190,57191,57191,57192,57192,57193,57193,57194,57194,57195,57195,57196, -57196,57197,57197,57198,57199,57199,57200,57200,57201,57201,57202,57202,57203, -57203,57204,57204,57205,57205,57206,57206,57207,57207,57208,57209,57209,57210, -57210,57211,57211,57212,57212,57213,57213,57214,57214,57215,57215,57216,57216, -57217,57217,57218,57219,57219,57220,57220,57221,57221,57222,57222,57223,57223, -57224,57224,57225,57225,57226,57226,57227,57227,57228,57229,57229,57230,57230, -57231,57231,57232,57232,57233,57233,57234,57234,57235,57235,57236,57236,57237, -57237,57238,57239,57239,57240,57240,57241,57241,57242,57242,57243,57243,57244, -57244,57245,57245,57246,57246,57247,57247,57248,57249,57249,57250,57250,57251, -57251,57252,57252,57253,57253,57254,57254,57255,57255,57256,57256,57257,57257, -57258,57258,57259,57260,57260,57261,57261,57262,57262,57263,57263,57264,57264, -57265,57265,57266,57266,57267,57267,57268,57268,57269,57270,57270,57271,57271, -57272,57272,57273,57273,57274,57274,57275,57275,57276,57276,57277,57277,57278, -57278,57279,57280,57280,57281,57281,57282,57282,57283,57283,57284,57284,57285, -57285,57286,57286,57287,57287,57288,57288,57289,57289,57290,57291,57291,57292, -57292,57293,57293,57294,57294,57295,57295,57296,57296,57297,57297,57298,57298, -57299,57299,57300,57301,57301,57302,57302,57303,57303,57304,57304,57305,57305, -57306,57306,57307,57307,57308,57308,57309,57309,57310,57310,57311,57312,57312, -57313,57313,57314,57314,57315,57315,57316,57316,57317,57317,57318,57318,57319, -57319,57320,57320,57321,57322,57322,57323,57323,57324,57324,57325,57325,57326, -57326,57327,57327,57328,57328,57329,57329,57330,57330,57331,57331,57332,57333, -57333,57334,57334,57335,57335,57336,57336,57337,57337,57338,57338,57339,57339, -57340,57340,57341,57341,57342,57342,57343,57344,57344,57345,57345,57346,57346, -57347,57347,57348,57348,57349,57349,57350,57350,57351,57351,57352,57352,57353, -57354,57354,57355,57355,57356,57356,57357,57357,57358,57358,57359,57359,57360, -57360,57361,57361,57362,57362,57363,57363,57364,57365,57365,57366,57366,57367, -57367,57368,57368,57369,57369,57370,57370,57371,57371,57372,57372,57373,57373, -57374,57374,57375,57376,57376,57377,57377,57378,57378,57379,57379,57380,57380, -57381,57381,57382,57382,57383,57383,57384,57384,57385,57385,57386,57387,57387, -57388,57388,57389,57389,57390,57390,57391,57391,57392,57392,57393,57393,57394, -57394,57395,57395,57396,57396,57397,57398,57398,57399,57399,57400,57400,57401, -57401,57402,57402,57403,57403,57404,57404,57405,57405,57406,57406,57407,57407, -57408,57409,57409,57410,57410,57411,57411,57412,57412,57413,57413,57414,57414, -57415,57415,57416,57416,57417,57417,57418,57418,57419,57420,57420,57421,57421, -57422,57422,57423,57423,57424,57424,57425,57425,57426,57426,57427,57427,57428, -57428,57429,57429,57430,57431,57431,57432,57432,57433,57433,57434,57434,57435, -57435,57436,57436,57437,57437,57438,57438,57439,57439,57440,57440,57441,57442, -57442,57443,57443,57444,57444,57445,57445,57446,57446,57447,57447,57448,57448, -57449,57449,57450,57450,57451,57451,57452,57452,57453,57454,57454,57455,57455, -57456,57456,57457,57457,57458,57458,57459,57459,57460,57460,57461,57461,57462, -57462,57463,57463,57464,57465,57465,57466,57466,57467,57467,57468,57468,57469, -57469,57470,57470,57471,57471,57472,57472,57473,57473,57474,57474,57475,57476, -57476,57477,57477,57478,57478,57479,57479,57480,57480,57481,57481,57482,57482, -57483,57483,57484,57484,57485,57485,57486,57486,57487,57488,57488,57489,57489, -57490,57490,57491,57491,57492,57492,57493,57493,57494,57494,57495,57495,57496, -57496,57497,57497,57498,57499,57499,57500,57500,57501,57501,57502,57502,57503, -57503,57504,57504,57505,57505,57506,57506,57507,57507,57508,57508,57509,57509, -57510,57511,57511,57512,57512,57513,57513,57514,57514,57515,57515,57516,57516, -57517,57517,57518,57518,57519,57519,57520,57520,57521,57522,57522,57523,57523, -57524,57524,57525,57525,57526,57526,57527,57527,57528,57528,57529,57529,57530, -57530,57531,57531,57532,57532,57533,57534,57534,57535,57535,57536,57536,57537, -57537,57538,57538,57539,57539,57540,57540,57541,57541,57542,57542,57543,57543, -57544,57544,57545,57546,57546,57547,57547,57548,57548,57549,57549,57550,57550, -57551,57551,57552,57552,57553,57553,57554,57554,57555,57555,57556,57556,57557, -57558,57558,57559,57559,57560,57560,57561,57561,57562,57562,57563,57563,57564, -57564,57565,57565,57566,57566,57567,57567,57568,57568,57569,57570,57570,57571, -57571,57572,57572,57573,57573,57574,57574,57575,57575,57576,57576,57577,57577, -57578,57578,57579,57579,57580,57580,57581,57582,57582,57583,57583,57584,57584, -57585,57585,57586,57586,57587,57587,57588,57588,57589,57589,57590,57590,57591, -57591,57592,57592,57593,57594,57594,57595,57595,57596,57596,57597,57597,57598, -57598,57599,57599,57600,57600,57601,57601,57602,57602,57603,57603,57604,57604, -57605,57606,57606,57607,57607,57608,57608,57609,57609,57610,57610,57611,57611, -57612,57612,57613,57613,57614,57614,57615,57615,57616,57616,57617,57618,57618, -57619,57619,57620,57620,57621,57621,57622,57622,57623,57623,57624,57624,57625, -57625,57626,57626,57627,57627,57628,57628,57629,57629,57630,57631,57631,57632, -57632,57633,57633,57634,57634,57635,57635,57636,57636,57637,57637,57638,57638, -57639,57639,57640,57640,57641,57641,57642,57643,57643,57644,57644,57645,57645, -57646,57646,57647,57647,57648,57648,57649,57649,57650,57650,57651,57651,57652, -57652,57653,57653,57654,57654,57655,57656,57656,57657,57657,57658,57658,57659, -57659,57660,57660,57661,57661,57662,57662,57663,57663,57664,57664,57665,57665, -57666,57666,57667,57668,57668,57669,57669,57670,57670,57671,57671,57672,57672, -57673,57673,57674,57674,57675,57675,57676,57676,57677,57677,57678,57678,57679, -57679,57680,57681,57681,57682,57682,57683,57683,57684,57684,57685,57685,57686, -57686,57687,57687,57688,57688,57689,57689,57690,57690,57691,57691,57692,57692, -57693,57694,57694,57695,57695,57696,57696,57697,57697,57698,57698,57699,57699, -57700,57700,57701,57701,57702,57702,57703,57703,57704,57704,57705,57705,57706, -57707,57707,57708,57708,57709,57709,57710,57710,57711,57711,57712,57712,57713, -57713,57714,57714,57715,57715,57716,57716,57717,57717,57718,57718,57719,57720, -57720,57721,57721,57722,57722,57723,57723,57724,57724,57725,57725,57726,57726, -57727,57727,57728,57728,57729,57729,57730,57730,57731,57731,57732,57733,57733, -57734,57734,57735,57735,57736,57736,57737,57737,57738,57738,57739,57739,57740, -57740,57741,57741,57742,57742,57743,57743,57744,57744,57745,57746,57746,57747, -57747,57748,57748,57749,57749,57750,57750,57751,57751,57752,57752,57753,57753, -57754,57754,57755,57755,57756,57756,57757,57757,57758,57759,57759,57760,57760, -57761,57761,57762,57762,57763,57763,57764,57764,57765,57765,57766,57766,57767, -57767,57768,57768,57769,57769,57770,57770,57771,57772,57772,57773,57773,57774, -57774,57775,57775,57776,57776,57777,57777,57778,57778,57779,57779,57780,57780, -57781,57781,57782,57782,57783,57783,57784,57784,57785,57786,57786,57787,57787, -57788,57788,57789,57789,57790,57790,57791,57791,57792,57792,57793,57793,57794, -57794,57795,57795,57796,57796,57797,57797,57798,57799,57799,57800,57800,57801, -57801,57802,57802,57803,57803,57804,57804,57805,57805,57806,57806,57807,57807, -57808,57808,57809,57809,57810,57810,57811,57811,57812,57813,57813,57814,57814, -57815,57815,57816,57816,57817,57817,57818,57818,57819,57819,57820,57820,57821, -57821,57822,57822,57823,57823,57824,57824,57825,57825,57826,57827,57827,57828, -57828,57829,57829,57830,57830,57831,57831,57832,57832,57833,57833,57834,57834, -57835,57835,57836,57836,57837,57837,57838,57838,57839,57839,57840,57841,57841, -57842,57842,57843,57843,57844,57844,57845,57845,57846,57846,57847,57847,57848, -57848,57849,57849,57850,57850,57851,57851,57852,57852,57853,57853,57854,57855, -57855,57856,57856,57857,57857,57858,57858,57859,57859,57860,57860,57861,57861, -57862,57862,57863,57863,57864,57864,57865,57865,57866,57866,57867,57867,57868, -57869,57869,57870,57870,57871,57871,57872,57872,57873,57873,57874,57874,57875, -57875,57876,57876,57877,57877,57878,57878,57879,57879,57880,57880,57881,57881, -57882,57883,57883,57884,57884,57885,57885,57886,57886,57887,57887,57888,57888, -57889,57889,57890,57890,57891,57891,57892,57892,57893,57893,57894,57894,57895, -57895,57896,57896,57897,57898,57898,57899,57899,57900,57900,57901,57901,57902, -57902,57903,57903,57904,57904,57905,57905,57906,57906,57907,57907,57908,57908, -57909,57909,57910,57910,57911,57912,57912,57913,57913,57914,57914,57915,57915, -57916,57916,57917,57917,57918,57918,57919,57919,57920,57920,57921,57921,57922, -57922,57923,57923,57924,57924,57925,57925,57926,57927,57927,57928,57928,57929, -57929,57930,57930,57931,57931,57932,57932,57933,57933,57934,57934,57935,57935, -57936,57936,57937,57937,57938,57938,57939,57939,57940,57940,57941,57942,57942, -57943,57943,57944,57944,57945,57945,57946,57946,57947,57947,57948,57948,57949, -57949,57950,57950,57951,57951,57952,57952,57953,57953,57954,57954,57955,57955, -57956,57957,57957,57958,57958,57959,57959,57960,57960,57961,57961,57962,57962, -57963,57963,57964,57964,57965,57965,57966,57966,57967,57967,57968,57968,57969, -57969,57970,57970,57971,57972,57972,57973,57973,57974,57974,57975,57975,57976, -57976,57977,57977,57978,57978,57979,57979,57980,57980,57981,57981,57982,57982, -57983,57983,57984,57984,57985,57985,57986,57987,57987,57988,57988,57989,57989, -57990,57990,57991,57991,57992,57992,57993,57993,57994,57994,57995,57995,57996, -57996,57997,57997,57998,57998,57999,57999,58000,58000,58001,58001,58002,58003, -58003,58004,58004,58005,58005,58006,58006,58007,58007,58008,58008,58009,58009, -58010,58010,58011,58011,58012,58012,58013,58013,58014,58014,58015,58015,58016, -58016,58017,58018,58018,58019,58019,58020,58020,58021,58021,58022,58022,58023, -58023,58024,58024,58025,58025,58026,58026,58027,58027,58028,58028,58029,58029, -58030,58030,58031,58031,58032,58032,58033,58034,58034,58035,58035,58036,58036, -58037,58037,58038,58038,58039,58039,58040,58040,58041,58041,58042,58042,58043, -58043,58044,58044,58045,58045,58046,58046,58047,58047,58048,58048,58049,58050, -58050,58051,58051,58052,58052,58053,58053,58054,58054,58055,58055,58056,58056, -58057,58057,58058,58058,58059,58059,58060,58060,58061,58061,58062,58062,58063, -58063,58064,58064,58065,58066,58066,58067,58067,58068,58068,58069,58069,58070, -58070,58071,58071,58072,58072,58073,58073,58074,58074,58075,58075,58076,58076, -58077,58077,58078,58078,58079,58079,58080,58080,58081,58081,58082,58083,58083, -58084,58084,58085,58085,58086,58086,58087,58087,58088,58088,58089,58089,58090, -58090,58091,58091,58092,58092,58093,58093,58094,58094,58095,58095,58096,58096, -58097,58097,58098,58099,58099,58100,58100,58101,58101,58102,58102,58103,58103, -58104,58104,58105,58105,58106,58106,58107,58107,58108,58108,58109,58109,58110, -58110,58111,58111,58112,58112,58113,58113,58114,58114,58115,58116,58116,58117, -58117,58118,58118,58119,58119,58120,58120,58121,58121,58122,58122,58123,58123, -58124,58124,58125,58125,58126,58126,58127,58127,58128,58128,58129,58129,58130, -58130,58131,58131,58132,58133,58133,58134,58134,58135,58135,58136,58136,58137, -58137,58138,58138,58139,58139,58140,58140,58141,58141,58142,58142,58143,58143, -58144,58144,58145,58145,58146,58146,58147,58147,58148,58148,58149,58150,58150, -58151,58151,58152,58152,58153,58153,58154,58154,58155,58155,58156,58156,58157, -58157,58158,58158,58159,58159,58160,58160,58161,58161,58162,58162,58163,58163, -58164,58164,58165,58165,58166,58167,58167,58168,58168,58169,58169,58170,58170, -58171,58171,58172,58172,58173,58173,58174,58174,58175,58175,58176,58176,58177, -58177,58178,58178,58179,58179,58180,58180,58181,58181,58182,58182,58183,58183, -58184,58185,58185,58186,58186,58187,58187,58188,58188,58189,58189,58190,58190, -58191,58191,58192,58192,58193,58193,58194,58194,58195,58195,58196,58196,58197, -58197,58198,58198,58199,58199,58200,58200,58201,58201,58202,58203,58203,58204, -58204,58205,58205,58206,58206,58207,58207,58208,58208,58209,58209,58210,58210, -58211,58211,58212,58212,58213,58213,58214,58214,58215,58215,58216,58216,58217, -58217,58218,58218,58219,58219,58220,58221,58221,58222,58222,58223,58223,58224, -58224,58225,58225,58226,58226,58227,58227,58228,58228,58229,58229,58230,58230, -58231,58231,58232,58232,58233,58233,58234,58234,58235,58235,58236,58236,58237, -58237,58238,58239,58239,58240,58240,58241,58241,58242,58242,58243,58243,58244, -58244,58245,58245,58246,58246,58247,58247,58248,58248,58249,58249,58250,58250, -58251,58251,58252,58252,58253,58253,58254,58254,58255,58255,58256,58256,58257, -58258,58258,58259,58259,58260,58260,58261,58261,58262,58262,58263,58263,58264, -58264,58265,58265,58266,58266,58267,58267,58268,58268,58269,58269,58270,58270, -58271,58271,58272,58272,58273,58273,58274,58274,58275,58275,58276,58277,58277, -58278,58278,58279,58279,58280,58280,58281,58281,58282,58282,58283,58283,58284, -58284,58285,58285,58286,58286,58287,58287,58288,58288,58289,58289,58290,58290, -58291,58291,58292,58292,58293,58293,58294,58294,58295,58296,58296,58297,58297, -58298,58298,58299,58299,58300,58300,58301,58301,58302,58302,58303,58303,58304, -58304,58305,58305,58306,58306,58307,58307,58308,58308,58309,58309,58310,58310, -58311,58311,58312,58312,58313,58313,58314,58314,58315,58316,58316,58317,58317, -58318,58318,58319,58319,58320,58320,58321,58321,58322,58322,58323,58323,58324, -58324,58325,58325,58326,58326,58327,58327,58328,58328,58329,58329,58330,58330, -58331,58331,58332,58332,58333,58333,58334,58334,58335,58336,58336,58337,58337, -58338,58338,58339,58339,58340,58340,58341,58341,58342,58342,58343,58343,58344, -58344,58345,58345,58346,58346,58347,58347,58348,58348,58349,58349,58350,58350, -58351,58351,58352,58352,58353,58353,58354,58354,58355,58356,58356,58357,58357, -58358,58358,58359,58359,58360,58360,58361,58361,58362,58362,58363,58363,58364, -58364,58365,58365,58366,58366,58367,58367,58368,58368,58369,58369,58370,58370, -58371,58371,58372,58372,58373,58373,58374,58374,58375,58375,58376,58377,58377, -58378,58378,58379,58379,58380,58380,58381,58381,58382,58382,58383,58383,58384, -58384,58385,58385,58386,58386,58387,58387,58388,58388,58389,58389,58390,58390, -58391,58391,58392,58392,58393,58393,58394,58394,58395,58395,58396,58396,58397, -58398,58398,58399,58399,58400,58400,58401,58401,58402,58402,58403,58403,58404, -58404,58405,58405,58406,58406,58407,58407,58408,58408,58409,58409,58410,58410, -58411,58411,58412,58412,58413,58413,58414,58414,58415,58415,58416,58416,58417, -58417,58418,58419,58419,58420,58420,58421,58421,58422,58422,58423,58423,58424, -58424,58425,58425,58426,58426,58427,58427,58428,58428,58429,58429,58430,58430, -58431,58431,58432,58432,58433,58433,58434,58434,58435,58435,58436,58436,58437, -58437,58438,58438,58439,58439,58440,58441,58441,58442,58442,58443,58443,58444, -58444,58445,58445,58446,58446,58447,58447,58448,58448,58449,58449,58450,58450, -58451,58451,58452,58452,58453,58453,58454,58454,58455,58455,58456,58456,58457, -58457,58458,58458,58459,58459,58460,58460,58461,58461,58462,58463,58463,58464, -58464,58465,58465,58466,58466,58467,58467,58468,58468,58469,58469,58470,58470, -58471,58471,58472,58472,58473,58473,58474,58474,58475,58475,58476,58476,58477, -58477,58478,58478,58479,58479,58480,58480,58481,58481,58482,58482,58483,58483, -58484,58484,58485,58486,58486,58487,58487,58488,58488,58489,58489,58490,58490, -58491,58491,58492,58492,58493,58493,58494,58494,58495,58495,58496,58496,58497, -58497,58498,58498,58499,58499,58500,58500,58501,58501,58502,58502,58503,58503, -58504,58504,58505,58505,58506,58506,58507,58507,58508,58508,58509,58510,58510, -58511,58511,58512,58512,58513,58513,58514,58514,58515,58515,58516,58516,58517, -58517,58518,58518,58519,58519,58520,58520,58521,58521,58522,58522,58523,58523, -58524,58524,58525,58525,58526,58526,58527,58527,58528,58528,58529,58529,58530, -58530,58531,58531,58532,58532,58533,58534,58534,58535,58535,58536,58536,58537, -58537,58538,58538,58539,58539,58540,58540,58541,58541,58542,58542,58543,58543, -58544,58544,58545,58545,58546,58546,58547,58547,58548,58548,58549,58549,58550, -58550,58551,58551,58552,58552,58553,58553,58554,58554,58555,58555,58556,58556, -58557,58557,58558,58559,58559,58560,58560,58561,58561,58562,58562,58563,58563, -58564,58564,58565,58565,58566,58566,58567,58567,58568,58568,58569,58569,58570, -58570,58571,58571,58572,58572,58573,58573,58574,58574,58575,58575,58576,58576, -58577,58577,58578,58578,58579,58579,58580,58580,58581,58581,58582,58582,58583, -58584,58584,58585,58585,58586,58586,58587,58587,58588,58588,58589,58589,58590, -58590,58591,58591,58592,58592,58593,58593,58594,58594,58595,58595,58596,58596, -58597,58597,58598,58598,58599,58599,58600,58600,58601,58601,58602,58602,58603, -58603,58604,58604,58605,58605,58606,58606,58607,58607,58608,58608,58609,58610, -58610,58611,58611,58612,58612,58613,58613,58614,58614,58615,58615,58616,58616, -58617,58617,58618,58618,58619,58619,58620,58620,58621,58621,58622,58622,58623, -58623,58624,58624,58625,58625,58626,58626,58627,58627,58628,58628,58629,58629, -58630,58630,58631,58631,58632,58632,58633,58633,58634,58634,58635,58635,58636, -58637,58637,58638,58638,58639,58639,58640,58640,58641,58641,58642,58642,58643, -58643,58644,58644,58645,58645,58646,58646,58647,58647,58648,58648,58649,58649, -58650,58650,58651,58651,58652,58652,58653,58653,58654,58654,58655,58655,58656, -58656,58657,58657,58658,58658,58659,58659,58660,58660,58661,58661,58662,58662, -58663,58663,58664,58665,58665,58666,58666,58667,58667,58668,58668,58669,58669, -58670,58670,58671,58671,58672,58672,58673,58673,58674,58674,58675,58675,58676, -58676,58677,58677,58678,58678,58679,58679,58680,58680,58681,58681,58682,58682, -58683,58683,58684,58684,58685,58685,58686,58686,58687,58687,58688,58688,58689, -58689,58690,58690,58691,58691,58692,58692,58693,58694,58694,58695,58695,58696, -58696,58697,58697,58698,58698,58699,58699,58700,58700,58701,58701,58702,58702, -58703,58703,58704,58704,58705,58705,58706,58706,58707,58707,58708,58708,58709, -58709,58710,58710,58711,58711,58712,58712,58713,58713,58714,58714,58715,58715, -58716,58716,58717,58717,58718,58718,58719,58719,58720,58720,58721,58721,58722, -58722,58723,58724,58724,58725,58725,58726,58726,58727,58727,58728,58728,58729, -58729,58730,58730,58731,58731,58732,58732,58733,58733,58734,58734,58735,58735, -58736,58736,58737,58737,58738,58738,58739,58739,58740,58740,58741,58741,58742, -58742,58743,58743,58744,58744,58745,58745,58746,58746,58747,58747,58748,58748, -58749,58749,58750,58750,58751,58751,58752,58752,58753,58753,58754,58755,58755, -58756,58756,58757,58757,58758,58758,58759,58759,58760,58760,58761,58761,58762, -58762,58763,58763,58764,58764,58765,58765,58766,58766,58767,58767,58768,58768, -58769,58769,58770,58770,58771,58771,58772,58772,58773,58773,58774,58774,58775, -58775,58776,58776,58777,58777,58778,58778,58779,58779,58780,58780,58781,58781, -58782,58782,58783,58783,58784,58784,58785,58785,58786,58786,58787,58788,58788, -58789,58789,58790,58790,58791,58791,58792,58792,58793,58793,58794,58794,58795, -58795,58796,58796,58797,58797,58798,58798,58799,58799,58800,58800,58801,58801, -58802,58802,58803,58803,58804,58804,58805,58805,58806,58806,58807,58807,58808, -58808,58809,58809,58810,58810,58811,58811,58812,58812,58813,58813,58814,58814, -58815,58815,58816,58816,58817,58817,58818,58818,58819,58819,58820,58820,58821, -58821,58822,58823,58823,58824,58824,58825,58825,58826,58826,58827,58827,58828, -58828,58829,58829,58830,58830,58831,58831,58832,58832,58833,58833,58834,58834, -58835,58835,58836,58836,58837,58837,58838,58838,58839,58839,58840,58840,58841, -58841,58842,58842,58843,58843,58844,58844,58845,58845,58846,58846,58847,58847, -58848,58848,58849,58849,58850,58850,58851,58851,58852,58852,58853,58853,58854, -58854,58855,58855,58856,58856,58857,58857,58858,58859,58859,58860,58860,58861, -58861,58862,58862,58863,58863,58864,58864,58865,58865,58866,58866,58867,58867, -58868,58868,58869,58869,58870,58870,58871,58871,58872,58872,58873,58873,58874, -58874,58875,58875,58876,58876,58877,58877,58878,58878,58879,58879,58880,58880, -58881,58881,58882,58882,58883,58883,58884,58884,58885,58885,58886,58886,58887, -58887,58888,58888,58889,58889,58890,58890,58891,58891,58892,58892,58893,58893, -58894,58894,58895,58895,58896,58896,58897,58898,58898,58899,58899,58900,58900, -58901,58901,58902,58902,58903,58903,58904,58904,58905,58905,58906,58906,58907, -58907,58908,58908,58909,58909,58910,58910,58911,58911,58912,58912,58913,58913, -58914,58914,58915,58915,58916,58916,58917,58917,58918,58918,58919,58919,58920, -58920,58921,58921,58922,58922,58923,58923,58924,58924,58925,58925,58926,58926, -58927,58927,58928,58928,58929,58929,58930,58930,58931,58931,58932,58932,58933, -58933,58934,58934,58935,58935,58936,58936,58937,58937,58938,58938,58939,58940, -58940,58941,58941,58942,58942,58943,58943,58944,58944,58945,58945,58946,58946, -58947,58947,58948,58948,58949,58949,58950,58950,58951,58951,58952,58952,58953, -58953,58954,58954,58955,58955,58956,58956,58957,58957,58958,58958,58959,58959, -58960,58960,58961,58961,58962,58962,58963,58963,58964,58964,58965,58965,58966, -58966,58967,58967,58968,58968,58969,58969,58970,58970,58971,58971,58972,58972, -58973,58973,58974,58974,58975,58975,58976,58976,58977,58977,58978,58978,58979, -58979,58980,58980,58981,58981,58982,58982,58983,58983,58984,58985,58985,58986, -58986,58987,58987,58988,58988,58989,58989,58990,58990,58991,58991,58992,58992, -58993,58993,58994,58994,58995,58995,58996,58996,58997,58997,58998,58998,58999, -58999,59000,59000,59001,59001,59002,59002,59003,59003,59004,59004,59005,59005, -59006,59006,59007,59007,59008,59008,59009,59009,59010,59010,59011,59011,59012, -59012,59013,59013,59014,59014,59015,59015,59016,59016,59017,59017,59018,59018, -59019,59019,59020,59020,59021,59021,59022,59022,59023,59023,59024,59024,59025, -59025,59026,59026,59027,59027,59028,59028,59029,59029,59030,59030,59031,59031, -59032,59032,59033,59033,59034,59035,59035,59036,59036,59037,59037,59038,59038, -59039,59039,59040,59040,59041,59041,59042,59042,59043,59043,59044,59044,59045, -59045,59046,59046,59047,59047,59048,59048,59049,59049,59050,59050,59051,59051, -59052,59052,59053,59053,59054,59054,59055,59055,59056,59056,59057,59057,59058, -59058,59059,59059,59060,59060,59061,59061,59062,59062,59063,59063,59064,59064, -59065,59065,59066,59066,59067,59067,59068,59068,59069,59069,59070,59070,59071, -59071,59072,59072,59073,59073,59074,59074,59075,59075,59076,59076,59077,59077, -59078,59078,59079,59079,59080,59080,59081,59081,59082,59082,59083,59083,59084, -59084,59085,59085,59086,59086,59087,59087,59088,59088,59089,59089,59090,59090, -59091,59092,59092,59093,59093,59094,59094,59095,59095,59096,59096,59097,59097, -59098,59098,59099,59099,59100,59100,59101,59101,59102,59102,59103,59103,59104, -59104,59105,59105,59106,59106,59107,59107,59108,59108,59109,59109,59110,59110, -59111,59111,59112,59112,59113,59113,59114,59114,59115,59115,59116,59116,59117, -59117,59118,59118,59119,59119,59120,59120,59121,59121,59122,59122,59123,59123, -59124,59124,59125,59125,59126,59126,59127,59127,59128,59128,59129,59129,59130, -59130,59131,59131,59132,59132,59133,59133,59134,59134,59135,59135,59136,59136, -59137,59137,59138,59138,59139,59139,59140,59140,59141,59141,59142,59142,59143, -59143,59144,59144,59145,59145,59146,59146,59147,59147,59148,59148,59149,59149, -59150,59150,59151,59151,59152,59152,59153,59153,59154,59154,59155,59155,59156, -59156,59157,59157,59158,59158,59159,59160,59160,59161,59161,59162,59162,59163, -59163,59164,59164,59165,59165,59166,59166,59167,59167,59168,59168,59169,59169, -59170,59170,59171,59171,59172,59172,59173,59173,59174,59174,59175,59175,59176, -59176,59177,59177,59178,59178,59179,59179,59180,59180,59181,59181,59182,59182, -59183,59183,59184,59184,59185,59185,59186,59186,59187,59187,59188,59188,59189, -59189,59190,59190,59191,59191,59192,59192,59193,59193,59194,59194,59195,59195, -59196,59196,59197,59197,59198,59198,59199,59199,59200,59200,59201,59201,59202, -59202,59203,59203,59204,59204,59205,59205,59206,59206,59207,59207,59208,59208, -59209,59209,59210,59210,59211,59211,59212,59212,59213,59213,59214,59214,59215, -59215,59216,59216,59217,59217,59218,59218,59219,59219,59220,59220,59221,59221, -59222,59222,59223,59223,59224,59224,59225,59225,59226,59226,59227,59227,59228, -59228,59229,59229,59230,59230,59231,59231,59232,59232,59233,59233,59234,59234, -59235,59235,59236,59236,59237,59237,59238,59238,59239,59239,59240,59240,59241, -59241,59242,59242,59243,59243,59244,59244,59245,59245,59246,59247,59247,59248, -59248,59249,59249,59250,59250,59251,59251,59252,59252,59253,59253,59254,59254, -59255,59255,59256,59256,59257,59257,59258,59258,59259,59259,59260,59260,59261, -59261,59262,59262,59263,59263,59264,59264,59265,59265,59266,59266,59267,59267, -59268,59268,59269,59269,59270,59270,59271,59271,59272,59272,59273,59273,59274, -59274,59275,59275,59276,59276,59277,59277,59278,59278,59279,59279,59280,59280, -59281,59281,59282,59282,59283,59283,59284,59284,59285,59285,59286,59286,59287, -59287,59288,59288,59289,59289,59290,59290,59291,59291,59292,59292,59293,59293, -59294,59294,59295,59295,59296,59296,59297,59297,59298,59298,59299,59299,59300, -59300,59301,59301,59302,59302,59303,59303,59304,59304,59305,59305,59306,59306, -59307,59307,59308,59308,59309,59309,59310,59310,59311,59311,59312,59312,59313, -59313,59314,59314,59315,59315,59316,59316,59317,59317,59318,59318,59319,59319, -59320,59320,59321,59321,59322,59322,59323,59323,59324,59324,59325,59325,59326, -59326,59327,59327,59328,59328,59329,59329,59330,59330,59331,59331,59332,59332, -59333,59333,59334,59334,59335,59335,59336,59336,59337,59337,59338,59338,59339, -59339,59340,59340,59341,59341,59342,59342,59343,59343,59344,59344,59345,59345, -59346,59346,59347,59347,59348,59348,59349,59349,59350,59350,59351,59351,59352, -59352,59353,59353,59354,59354,59355,59355,59356,59356,59357,59357,59358,59358, -59359,59359,59360,59360,59361,59361,59362,59362,59363,59363,59364,59364,59365, -59365,59366,59366,59367,59367,59368,59368,59369,59369,59370,59370,59371,59371, -59372,59372,59373,59373,59374,59374,59375,59375,59376,59376,59377,59377,59378, -59378,59379,59379,59380,59380,59381,59381,59382,59382,59383,59383,59384,59384, -59385,59385,59386,59386,59387,59387,59388,59388,59389,59389,59390,59390,59391, -59391,59392,59392,59393,59393,59394,59394,59395,59395,59396,59396,59397,59397, -59398,59398,59399,59399,59400,59400,59401,59401,59402,59402,59403,59403,59404, -59404,59405,59405,59406,59406,59407,59407,59408,59408,59409,59409,59410,59410, -59411,59411,59412,59412,59413,59413,59414,59414,59415,59415,59416,59416,59417, -59417,59418,59418,59419,59419,59420,59420,59421,59421,59422,59422,59423,59423, -59424,59424,59425,59425,59426,59426,59427,59427,59428,59428,59429,59429,59430, -59430,59431,59431,59432,59432,59433,59433,59434,59434,59435,59435,59436,59436, -59437,59437,59438,59438,59439,59439,59440,59440,59441,59441,59442,59442,59443, -59443,59444,59444,59445,59445,59446,59446,59447,59447,59448,59448,59449,59449, -59450,59450,59451,59452,59452,59453,59453,59454,59454,59455,59455,59456,59456, -59457,59457,59458,59458,59459,59459,59460,59460,59461,59461,59462,59462,59463, -59463,59464,59464,59465,59465,59466,59466,59467,59467,59467,59468,59468,59469, -59469,59470,59470,59471,59471,59472,59472,59473,59473,59474,59474,59475,59475, -59476,59476,59477,59477,59478,59478,59479,59479,59480,59480,59481,59481,59482, -59482,59483,59483,59484,59484,59485,59485,59486,59486,59487,59487,59488,59488, -59489,59489,59490,59490,59491,59491,59492,59492,59493,59493,59494,59494,59495, -59495,59496,59496,59497,59497,59498,59498,59499,59499,59500,59500,59501,59501, -59502,59502,59503,59503,59504,59504,59505,59505,59506,59506,59507,59507,59508, -59508,59509,59509,59510,59510,59511,59511,59512,59512,59513,59513,59514,59514, -59515,59515,59516,59516,59517,59517,59518,59518,59519,59519,59520,59520,59521, -59521,59522,59522,59523,59523,59524,59524,59525,59525,59526,59526,59527,59527, -59528,59528,59529,59529,59530,59530,59531,59531,59532,59532,59533,59533,59534, -59534,59535,59535,59536,59536,59537,59537,59538,59538,59539,59539,59540,59540, -59541,59541,59542,59542,59543,59543,59544,59544,59545,59545,59546,59546,59547, -59547,59548,59548,59549,59549,59550,59550,59551,59551,59552,59552,59553,59553, -59554,59554,59555,59555,59556,59556,59557,59557,59558,59558,59559,59559,59560, -59560,59561,59561,59562,59562,59563,59563,59564,59564,59565,59565,59566,59566, -59567,59567,59568,59568,59569,59569,59570,59570,59571,59571,59572,59572,59573, -59573,59574,59574,59575,59575,59576,59576,59577,59577,59578,59578,59579,59579, -59580,59580,59581,59581,59582,59582,59583,59583,59584,59584,59585,59585,59586, -59586,59587,59587,59588,59588,59589,59589,59590,59590,59591,59591,59592,59592, -59593,59593,59594,59594,59595,59595,59596,59596,59597,59597,59598,59598,59599, -59599,59600,59600,59601,59601,59602,59602,59603,59603,59604,59604,59605,59605, -59606,59606,59607,59607,59608,59608,59609,59609,59610,59610,59611,59611,59612, -59612,59613,59613,59614,59614,59615,59615,59616,59616,59617,59617,59618,59618, -59619,59619,59620,59620,59621,59621,59622,59622,59623,59623,59624,59624,59625, -59625,59626,59626,59627,59627,59628,59628,59629,59629,59630,59630,59631,59631, -59632,59632,59633,59633,59634,59634,59635,59635,59636,59636,59637,59637,59638, -59638,59639,59639,59640,59640,59641,59641,59642,59642,59643,59643,59644,59644, -59645,59645,59646,59646,59647,59647,59648,59648,59649,59649,59650,59650,59651, -59651,59652,59652,59653,59653,59654,59654,59655,59655,59656,59656,59657,59657, -59658,59658,59659,59659,59660,59660,59661,59661,59662,59662,59663,59663,59664, -59664,59665,59665,59666,59666,59667,59667,59668,59668,59669,59669,59670,59670, -59671,59671,59671,59672,59672,59673,59673,59674,59674,59675,59675,59676,59676, -59677,59677,59678,59678,59679,59679,59680,59680,59681,59681,59682,59682,59683, -59683,59684,59684,59685,59685,59686,59686,59687,59687,59688,59688,59689,59689, -59690,59690,59691,59691,59692,59692,59693,59693,59694,59694,59695,59695,59696, -59696,59697,59697,59698,59698,59699,59699,59700,59700,59701,59701,59702,59702, -59703,59703,59704,59704,59705,59705,59706,59706,59707,59707,59708,59708,59709, -59709,59710,59710,59711,59711,59712,59712,59713,59713,59714,59714,59715,59715, -59716,59716,59717,59717,59718,59718,59719,59719,59720,59720,59721,59721,59722, -59722,59723,59723,59724,59724,59725,59725,59726,59726,59727,59727,59728,59728, -59729,59729,59730,59730,59731,59731,59732,59732,59733,59733,59734,59734,59735, -59735,59736,59736,59737,59737,59738,59738,59739,59739,59740,59740,59741,59741, -59742,59742,59743,59743,59744,59744,59745,59745,59746,59746,59747,59747,59748, -59748,59749,59749,59750,59750,59751,59751,59752,59752,59753,59753,59754,59754, -59755,59755,59756,59756,59757,59757,59758,59758,59759,59759,59759,59760,59760, -59761,59761,59762,59762,59763,59763,59764,59764,59765,59765,59766,59766,59767, -59767,59768,59768,59769,59769,59770,59770,59771,59771,59772,59772,59773,59773, -59774,59774,59775,59775,59776,59776,59777,59777,59778,59778,59779,59779,59780, -59780,59781,59781,59782,59782,59783,59783,59784,59784,59785,59785,59786,59786, -59787,59787,59788,59788,59789,59789,59790,59790,59791,59791,59792,59792,59793, -59793,59794,59794,59795,59795,59796,59796,59797,59797,59798,59798,59799,59799, -59800,59800,59801,59801,59802,59802,59803,59803,59804,59804,59805,59805,59806, -59806,59807,59807,59808,59808,59809,59809,59810,59810,59811,59811,59812,59812, -59813,59813,59814,59814,59815,59815,59816,59816,59817,59817,59818,59818,59819, -59819,59820,59820,59821,59821,59822,59822,59823,59823,59824,59824,59825,59825, -59826,59826,59826,59827,59827,59828,59828,59829,59829,59830,59830,59831,59831, -59832,59832,59833,59833,59834,59834,59835,59835,59836,59836,59837,59837,59838, -59838,59839,59839,59840,59840,59841,59841,59842,59842,59843,59843,59844,59844, -59845,59845,59846,59846,59847,59847,59848,59848,59849,59849,59850,59850,59851, -59851,59852,59852,59853,59853,59854,59854,59855,59855,59856,59856,59857,59857, -59858,59858,59859,59859,59860,59860,59861,59861,59862,59862,59863,59863,59864, -59864,59865,59865,59866,59866,59867,59867,59868,59868,59869,59869,59870,59870, -59871,59871,59872,59872,59873,59873,59874,59874,59875,59875,59876,59876,59877, -59877,59878,59878,59879,59879,59880,59880,59881,59881,59882,59882,59883,59883, -59883,59884,59884,59885,59885,59886,59886,59887,59887,59888,59888,59889,59889, -59890,59890,59891,59891,59892,59892,59893,59893,59894,59894,59895,59895,59896, -59896,59897,59897,59898,59898,59899,59899,59900,59900,59901,59901,59902,59902, -59903,59903,59904,59904,59905,59905,59906,59906,59907,59907,59908,59908,59909, -59909,59910,59910,59911,59911,59912,59912,59913,59913,59914,59914,59915,59915, -59916,59916,59917,59917,59918,59918,59919,59919,59920,59920,59921,59921,59922, -59922,59923,59923,59924,59924,59925,59925,59926,59926,59927,59927,59928,59928, -59929,59929,59930,59930,59931,59931,59932,59932,59933,59933,59933,59934,59934, -59935,59935,59936,59936,59937,59937,59938,59938,59939,59939,59940,59940,59941, -59941,59942,59942,59943,59943,59944,59944,59945,59945,59946,59946,59947,59947, -59948,59948,59949,59949,59950,59950,59951,59951,59952,59952,59953,59953,59954, -59954,59955,59955,59956,59956,59957,59957,59958,59958,59959,59959,59960,59960, -59961,59961,59962,59962,59963,59963,59964,59964,59965,59965,59966,59966,59967, -59967,59968,59968,59969,59969,59970,59970,59971,59971,59972,59972,59973,59973, -59974,59974,59975,59975,59976,59976,59977,59977,59978,59978,59978,59979,59979, -59980,59980,59981,59981,59982,59982,59983,59983,59984,59984,59985,59985,59986, -59986,59987,59987,59988,59988,59989,59989,59990,59990,59991,59991,59992,59992, -59993,59993,59994,59994,59995,59995,59996,59996,59997,59997,59998,59998,59999, -59999,60000,60000,60001,60001,60002,60002,60003,60003,60004,60004,60005,60005, -60006,60006,60007,60007,60008,60008,60009,60009,60010,60010,60011,60011,60012, -60012,60013,60013,60014,60014,60015,60015,60016,60016,60017,60017,60018,60018, -60019,60019,60020,60020,60020,60021,60021,60022,60022,60023,60023,60024,60024, -60025,60025,60026,60026,60027,60027,60028,60028,60029,60029,60030,60030,60031, -60031,60032,60032,60033,60033,60034,60034,60035,60035,60036,60036,60037,60037, -60038,60038,60039,60039,60040,60040,60041,60041,60042,60042,60043,60043,60044, -60044,60045,60045,60046,60046,60047,60047,60048,60048,60049,60049,60050,60050, -60051,60051,60052,60052,60053,60053,60054,60054,60055,60055,60056,60056,60057, -60057,60058,60058,60059,60059,60059,60060,60060,60061,60061,60062,60062,60063, -60063,60064,60064,60065,60065,60066,60066,60067,60067,60068,60068,60069,60069, -60070,60070,60071,60071,60072,60072,60073,60073,60074,60074,60075,60075,60076, -60076,60077,60077,60078,60078,60079,60079,60080,60080,60081,60081,60082,60082, -60083,60083,60084,60084,60085,60085,60086,60086,60087,60087,60088,60088,60089, -60089,60090,60090,60091,60091,60092,60092,60093,60093,60094,60094,60095,60095, -60095,60096,60096,60097,60097,60098,60098,60099,60099,60100,60100,60101,60101, -60102,60102,60103,60103,60104,60104,60105,60105,60106,60106,60107,60107,60108, -60108,60109,60109,60110,60110,60111,60111,60112,60112,60113,60113,60114,60114, -60115,60115,60116,60116,60117,60117,60118,60118,60119,60119,60120,60120,60121, -60121,60122,60122,60123,60123,60124,60124,60125,60125,60126,60126,60127,60127, -60128,60128,60129,60129,60129,60130,60130,60131,60131,60132,60132,60133,60133, -60134,60134,60135,60135,60136,60136,60137,60137,60138,60138,60139,60139,60140, -60140,60141,60141,60142,60142,60143,60143,60144,60144,60145,60145,60146,60146, -60147,60147,60148,60148,60149,60149,60150,60150,60151,60151,60152,60152,60153, -60153,60154,60154,60155,60155,60156,60156,60157,60157,60158,60158,60159,60159, -60160,60160,60161,60161,60162,60162,60162,60163,60163,60164,60164,60165,60165, -60166,60166,60167,60167,60168,60168,60169,60169,60170,60170,60171,60171,60172, -60172,60173,60173,60174,60174,60175,60175,60176,60176,60177,60177,60178,60178, -60179,60179,60180,60180,60181,60181,60182,60182,60183,60183,60184,60184,60185, -60185,60186,60186,60187,60187,60188,60188,60189,60189,60190,60190,60191,60191, -60192,60192,60193,60193,60193,60194,60194,60195,60195,60196,60196,60197,60197, -60198,60198,60199,60199,60200,60200,60201,60201,60202,60202,60203,60203,60204, -60204,60205,60205,60206,60206,60207,60207,60208,60208,60209,60209,60210,60210, -60211,60211,60212,60212,60213,60213,60214,60214,60215,60215,60216,60216,60217, -60217,60218,60218,60219,60219,60220,60220,60221,60221,60222,60222,60223,60223, -60223,60224,60224,60225,60225,60226,60226,60227,60227,60228,60228,60229,60229, -60230,60230,60231,60231,60232,60232,60233,60233,60234,60234,60235,60235,60236, -60236,60237,60237,60238,60238,60239,60239,60240,60240,60241,60241,60242,60242, -60243,60243,60244,60244,60245,60245,60246,60246,60247,60247,60248,60248,60249, -60249,60250,60250,60251,60251,60252,60252,60252,60253,60253,60254,60254,60255, -60255,60256,60256,60257,60257,60258,60258,60259,60259,60260,60260,60261,60261, -60262,60262,60263,60263,60264,60264,60265,60265,60266,60266,60267,60267,60268, -60268,60269,60269,60270,60270,60271,60271,60272,60272,60273,60273,60274,60274, -60275,60275,60276,60276,60277,60277,60278,60278,60279,60279,60280,60280,60280, -60281,60281,60282,60282,60283,60283,60284,60284,60285,60285,60286,60286,60287, -60287,60288,60288,60289,60289,60290,60290,60291,60291,60292,60292,60293,60293, -60294,60294,60295,60295,60296,60296,60297,60297,60298,60298,60299,60299,60300, -60300,60301,60301,60302,60302,60303,60303,60304,60304,60305,60305,60306,60306, -60307,60307,60307,60308,60308,60309,60309,60310,60310,60311,60311,60312,60312, -60313,60313,60314,60314,60315,60315,60316,60316,60317,60317,60318,60318,60319, -60319,60320,60320,60321,60321,60322,60322,60323,60323,60324,60324,60325,60325, -60326,60326,60327,60327,60328,60328,60329,60329,60330,60330,60331,60331,60332, -60332,60333,60333,60333,60334,60334,60335,60335,60336,60336,60337,60337,60338, -60338,60339,60339,60340,60340,60341,60341,60342,60342,60343,60343,60344,60344, -60345,60345,60346,60346,60347,60347,60348,60348,60349,60349,60350,60350,60351, -60351,60352,60352,60353,60353,60354,60354,60355,60355,60356,60356,60357,60357, -60358,60358,60358,60359,60359,60360,60360,60361,60361,60362,60362,60363,60363, -60364,60364,60365,60365,60366,60366,60367,60367,60368,60368,60369,60369,60370, -60370,60371,60371,60372,60372,60373,60373,60374,60374,60375,60375,60376,60376, -60377,60377,60378,60378,60379,60379,60380,60380,60381,60381,60382,60382,60383, -60383,60383,60384,60384,60385,60385,60386,60386,60387,60387,60388,60388,60389, -60389,60390,60390,60391,60391,60392,60392,60393,60393,60394,60394,60395,60395, -60396,60396,60397,60397,60398,60398,60399,60399,60400,60400,60401,60401,60402, -60402,60403,60403,60404,60404,60405,60405,60406,60406,60407,60407,60407,60408, -60408,60409,60409,60410,60410,60411,60411,60412,60412,60413,60413,60414,60414, -60415,60415,60416,60416,60417,60417,60418,60418,60419,60419,60420,60420,60421, -60421,60422,60422,60423,60423,60424,60424,60425,60425,60426,60426,60427,60427, -60428,60428,60429,60429,60430,60430,60430,60431,60431,60432,60432,60433,60433, -60434,60434,60435,60435,60436,60436,60437,60437,60438,60438,60439,60439,60440, -60440,60441,60441,60442,60442,60443,60443,60444,60444,60445,60445,60446,60446, -60447,60447,60448,60448,60449,60449,60450,60450,60451,60451,60452,60452,60453, -60453,60453,60454,60454,60455,60455,60456,60456,60457,60457,60458,60458,60459, -60459,60460,60460,60461,60461,60462,60462,60463,60463,60464,60464,60465,60465, -60466,60466,60467,60467,60468,60468,60469,60469,60470,60470,60471,60471,60472, -60472,60473,60473,60474,60474,60475,60475,60476,60476,60476,60477,60477,60478, -60478,60479,60479,60480,60480,60481,60481,60482,60482,60483,60483,60484,60484, -60485,60485,60486,60486,60487,60487,60488,60488,60489,60489,60490,60490,60491, -60491,60492,60492,60493,60493,60494,60494,60495,60495,60496,60496,60497,60497, -60497,60498,60498,60499,60499,60500,60500,60501,60501,60502,60502,60503,60503, -60504,60504,60505,60505,60506,60506,60507,60507,60508,60508,60509,60509,60510, -60510,60511,60511,60512,60512,60513,60513,60514,60514,60515,60515,60516,60516, -60517,60517,60518,60518,60519,60519,60519,60520,60520,60521,60521,60522,60522, -60523,60523,60524,60524,60525,60525,60526,60526,60527,60527,60528,60528,60529, -60529,60530,60530,60531,60531,60532,60532,60533,60533,60534,60534,60535,60535, -60536,60536,60537,60537,60538,60538,60539,60539,60540,60540,60540,60541,60541, -60542,60542,60543,60543,60544,60544,60545,60545,60546,60546,60547,60547,60548, -60548,60549,60549,60550,60550,60551,60551,60552,60552,60553,60553,60554,60554, -60555,60555,60556,60556,60557,60557,60558,60558,60559,60559,60560,60560,60560, -60561,60561,60562,60562,60563,60563,60564,60564,60565,60565,60566,60566,60567, -60567,60568,60568,60569,60569,60570,60570,60571,60571,60572,60572,60573,60573, -60574,60574,60575,60575,60576,60576,60577,60577,60578,60578,60579,60579,60580, -60580,60580,60581,60581,60582,60582,60583,60583,60584,60584,60585,60585,60586, -60586,60587,60587,60588,60588,60589,60589,60590,60590,60591,60591,60592,60592, -60593,60593,60594,60594,60595,60595,60596,60596,60597,60597,60598,60598,60599, -60599,60600,60600,60600,60601,60601,60602,60602,60603,60603,60604,60604,60605, -60605,60606,60606,60607,60607,60608,60608,60609,60609,60610,60610,60611,60611, -60612,60612,60613,60613,60614,60614,60615,60615,60616,60616,60617,60617,60618, -60618,60619,60619,60620,60620,60620,60621,60621,60622,60622,60623,60623,60624, -60624,60625,60625,60626,60626,60627,60627,60628,60628,60629,60629,60630,60630, -60631,60631,60632,60632,60633,60633,60634,60634,60635,60635,60636,60636,60637, -60637,60638,60638,60639,60639,60639,60640,60640,60641,60641,60642,60642,60643, -60643,60644,60644,60645,60645,60646,60646,60647,60647,60648,60648,60649,60649, -60650,60650,60651,60651,60652,60652,60653,60653,60654,60654,60655,60655,60656, -60656,60657,60657,60658,60658,60658,60659,60659,60660,60660,60661,60661,60662, -60662,60663,60663,60664,60664,60665,60665,60666,60666,60667,60667,60668,60668, -60669,60669,60670,60670,60671,60671,60672,60672,60673,60673,60674,60674,60675, -60675,60676,60676,60676,60677,60677,60678,60678,60679,60679,60680,60680,60681, -60681,60682,60682,60683,60683,60684,60684,60685,60685,60686,60686,60687,60687, -60688,60688,60689,60689,60690,60690,60691,60691,60692,60692,60693,60693,60694, -60694,60695,60695,60695,60696,60696,60697,60697,60698,60698,60699,60699,60700, -60700,60701,60701,60702,60702,60703,60703,60704,60704,60705,60705,60706,60706, -60707,60707,60708,60708,60709,60709,60710,60710,60711,60711,60712,60712,60713, -60713,60713,60714,60714,60715,60715,60716,60716,60717,60717,60718,60718,60719, -60719,60720,60720,60721,60721,60722,60722,60723,60723,60724,60724,60725,60725, -60726,60726,60727,60727,60728,60728,60729,60729,60730,60730,60730,60731,60731, -60732,60732,60733,60733,60734,60734,60735,60735,60736,60736,60737,60737,60738, -60738,60739,60739,60740,60740,60741,60741,60742,60742,60743,60743,60744,60744, -60745,60745,60746,60746,60747,60747,60748,60748,60748,60749,60749,60750,60750, -60751,60751,60752,60752,60753,60753,60754,60754,60755,60755,60756,60756,60757, -60757,60758,60758,60759,60759,60760,60760,60761,60761,60762,60762,60763,60763, -60764,60764,60765,60765,60765,60766,60766,60767,60767,60768,60768,60769,60769, -60770,60770,60771,60771,60772,60772,60773,60773,60774,60774,60775,60775,60776, -60776,60777,60777,60778,60778,60779,60779,60780,60780,60781,60781,60782,60782, -60782,60783,60783,60784,60784,60785,60785,60786,60786,60787,60787,60788,60788, -60789,60789,60790,60790,60791,60791,60792,60792,60793,60793,60794,60794,60795, -60795,60796,60796,60797,60797,60798,60798,60799,60799,60799,60800,60800,60801, -60801,60802,60802,60803,60803,60804,60804,60805,60805,60806,60806,60807,60807, -60808,60808,60809,60809,60810,60810,60811,60811,60812,60812,60813,60813,60814, -60814,60815,60815,60816,60816,60816,60817,60817,60818,60818,60819,60819,60820, -60820,60821,60821,60822,60822,60823,60823,60824,60824,60825,60825,60826,60826, -60827,60827,60828,60828,60829,60829,60830,60830,60831,60831,60832,60832,60832, -60833,60833,60834,60834,60835,60835,60836,60836,60837,60837,60838,60838,60839, -60839,60840,60840,60841,60841,60842,60842,60843,60843,60844,60844,60845,60845, -60846,60846,60847,60847,60848,60848,60848,60849,60849,60850,60850,60851,60851, -60852,60852,60853,60853,60854,60854,60855,60855,60856,60856,60857,60857,60858, -60858,60859,60859,60860,60860,60861,60861,60862,60862,60863,60863,60864,60864, -60864,60865,60865,60866,60866,60867,60867,60868,60868,60869,60869,60870,60870, -60871,60871,60872,60872,60873,60873,60874,60874,60875,60875,60876,60876,60877, -60877,60878,60878,60879,60879,60880,60880,60880,60881,60881,60882,60882,60883, -60883,60884,60884,60885,60885,60886,60886,60887,60887,60888,60888,60889,60889, -60890,60890,60891,60891,60892,60892,60893,60893,60894,60894,60895,60895,60896, -60896,60896,60897,60897,60898,60898,60899,60899,60900,60900,60901,60901,60902, -60902,60903,60903,60904,60904,60905,60905,60906,60906,60907,60907,60908,60908, -60909,60909,60910,60910,60911,60911,60911,60912,60912,60913,60913,60914,60914, -60915,60915,60916,60916,60917,60917,60918,60918,60919,60919,60920,60920,60921, -60921,60922,60922,60923,60923,60924,60924,60925,60925,60926,60926,60927,60927, -60927,60928,60928,60929,60929,60930,60930,60931,60931,60932,60932,60933,60933, -60934,60934,60935,60935,60936,60936,60937,60937,60938,60938,60939,60939,60940, -60940,60941,60941,60942,60942,60942,60943,60943,60944,60944,60945,60945,60946, -60946,60947,60947,60948,60948,60949,60949,60950,60950,60951,60951,60952,60952, -60953,60953,60954,60954,60955,60955,60956,60956,60957,60957,60957,60958,60958, -60959,60959,60960,60960,60961,60961,60962,60962,60963,60963,60964,60964,60965, -60965,60966,60966,60967,60967,60968,60968,60969,60969,60970,60970,60971,60971, -60972,60972,60972,60973,60973,60974,60974,60975,60975,60976,60976,60977,60977, -60978,60978,60979,60979,60980,60980,60981,60981,60982,60982,60983,60983,60984, -60984,60985,60985,60986,60986,60987,60987,60987,60988,60988,60989,60989,60990, -60990,60991,60991,60992,60992,60993,60993,60994,60994,60995,60995,60996,60996, -60997,60997,60998,60998,60999,60999,61000,61000,61001,61001,61001,61002,61002, -61003,61003,61004,61004,61005,61005,61006,61006,61007,61007,61008,61008,61009, -61009,61010,61010,61011,61011,61012,61012,61013,61013,61014,61014,61015,61015, -61016,61016,61016,61017,61017,61018,61018,61019,61019,61020,61020,61021,61021, -61022,61022,61023,61023,61024,61024,61025,61025,61026,61026,61027,61027,61028, -61028,61029,61029,61030,61030,61030,61031,61031,61032,61032,61033,61033,61034, -61034,61035,61035,61036,61036,61037,61037,61038,61038,61039,61039,61040,61040, -61041,61041,61042,61042,61043,61043,61044,61044,61044,61045,61045,61046,61046, -61047,61047,61048,61048,61049,61049,61050,61050,61051,61051,61052,61052,61053, -61053,61054,61054,61055,61055,61056,61056,61057,61057,61058,61058,61058,61059, -61059,61060,61060,61061,61061,61062,61062,61063,61063,61064,61064,61065,61065, -61066,61066,61067,61067,61068,61068,61069,61069,61070,61070,61071,61071,61072, -61072,61072,61073,61073,61074,61074,61075,61075,61076,61076,61077,61077,61078, -61078,61079,61079,61080,61080,61081,61081,61082,61082,61083,61083,61084,61084, -61085,61085,61086,61086,61086,61087,61087,61088,61088,61089,61089,61090,61090, -61091,61091,61092,61092,61093,61093,61094,61094,61095,61095,61096,61096,61097, -61097,61098,61098,61099,61099,61100,61100,61100,61101,61101,61102,61102,61103, -61103,61104,61104,61105,61105,61106,61106,61107,61107,61108,61108,61109,61109, -61110,61110,61111,61111,61112,61112,61113,61113,61113,61114,61114,61115,61115, -61116,61116,61117,61117,61118,61118,61119,61119,61120,61120,61121,61121,61122, -61122,61123,61123,61124,61124,61125,61125,61126,61126,61127,61127,61127,61128, -61128,61129,61129,61130,61130,61131,61131,61132,61132,61133,61133,61134,61134, -61135,61135,61136,61136,61137,61137,61138,61138,61139,61139,61140,61140,61140, -61141,61141,61142,61142,61143,61143,61144,61144,61145,61145,61146,61146,61147, -61147,61148,61148,61149,61149,61150,61150,61151,61151,61152,61152,61153,61153, -61154,61154,61154,61155,61155,61156,61156,61157,61157,61158,61158,61159,61159, -61160,61160,61161,61161,61162,61162,61163,61163,61164,61164,61165,61165,61166, -61166,61167,61167,61167,61168,61168,61169,61169,61170,61170,61171,61171,61172, -61172,61173,61173,61174,61174,61175,61175,61176,61176,61177,61177,61178,61178, -61179,61179,61180,61180,61180,61181,61181,61182,61182,61183,61183,61184,61184, -61185,61185,61186,61186,61187,61187,61188,61188,61189,61189,61190,61190,61191, -61191,61192,61192,61193,61193,61193,61194,61194,61195,61195,61196,61196,61197, -61197,61198,61198,61199,61199,61200,61200,61201,61201,61202,61202,61203,61203, -61204,61204,61205,61205,61206,61206,61206,61207,61207,61208,61208,61209,61209, -61210,61210,61211,61211,61212,61212,61213,61213,61214,61214,61215,61215,61216, -61216,61217,61217,61218,61218,61218,61219,61219,61220,61220,61221,61221,61222, -61222,61223,61223,61224,61224,61225,61225,61226,61226,61227,61227,61228,61228, -61229,61229,61230,61230,61231,61231,61231,61232,61232,61233,61233,61234,61234, -61235,61235,61236,61236,61237,61237,61238,61238,61239,61239,61240,61240,61241, -61241,61242,61242,61243,61243,61244,61244,61244,61245,61245,61246,61246,61247, -61247,61248,61248,61249,61249,61250,61250,61251,61251,61252,61252,61253,61253, -61254,61254,61255,61255,61256,61256,61256,61257,61257,61258,61258,61259,61259, -61260,61260,61261,61261,61262,61262,61263,61263,61264,61264,61265,61265,61266, -61266,61267,61267,61268,61268,61269,61269,61269,61270,61270,61271,61271,61272, -61272,61273,61273,61274,61274,61275,61275,61276,61276,61277,61277,61278,61278, -61279,61279,61280,61280,61281,61281,61281,61282,61282,61283,61283,61284,61284, -61285,61285,61286,61286,61287,61287,61288,61288,61289,61289,61290,61290,61291, -61291,61292,61292,61293,61293,61293,61294,61294,61295,61295,61296,61296,61297, -61297,61298,61298,61299,61299,61300,61300,61301,61301,61302,61302,61303,61303, -61304,61304,61305,61305,61305,61306,61306,61307,61307,61308,61308,61309,61309, -61310,61310,61311,61311,61312,61312,61313,61313,61314,61314,61315,61315,61316, -61316,61317,61317,61317,61318,61318,61319,61319,61320,61320,61321,61321,61322, -61322,61323,61323,61324,61324,61325,61325,61326,61326,61327,61327,61328,61328, -61329,61329,61329,61330,61330,61331,61331,61332,61332,61333,61333,61334,61334, -61335,61335,61336,61336,61337,61337,61338,61338,61339,61339,61340,61340,61341, -61341,61341,61342,61342,61343,61343,61344,61344,61345,61345,61346,61346,61347, -61347,61348,61348,61349,61349,61350,61350,61351,61351,61352,61352,61353,61353, -61353,61354,61354,61355,61355,61356,61356,61357,61357,61358,61358,61359,61359, -61360,61360,61361,61361,61362,61362,61363,61363,61364,61364,61365,61365,61365, -61366,61366,61367,61367,61368,61368,61369,61369,61370,61370,61371,61371,61372, -61372,61373,61373,61374,61374,61375,61375,61376,61376,61377,61377,61377,61378, -61378,61379,61379,61380,61380,61381,61381,61382,61382,61383,61383,61384,61384, -61385,61385,61386,61386,61387,61387,61388,61388,61388,61389,61389,61390,61390, -61391,61391,61392,61392,61393,61393,61394,61394,61395,61395,61396,61396,61397, -61397,61398,61398,61399,61399,61400,61400,61400,61401,61401,61402,61402,61403, -61403,61404,61404,61405,61405,61406,61406,61407,61407,61408,61408,61409,61409, -61410,61410,61411,61411,61411,61412,61412,61413,61413,61414,61414,61415,61415, -61416,61416,61417,61417,61418,61418,61419,61419,61420,61420,61421,61421,61422, -61422,61423,61423,61423,61424,61424,61425,61425,61426,61426,61427,61427,61428, -61428,61429,61429,61430,61430,61431,61431,61432,61432,61433,61433,61434,61434, -61434,61435,61435,61436,61436,61437,61437,61438,61438,61439,61439,61440,61440, -61441,61441,61442,61442,61443,61443,61444,61444,61445,61445,61445,61446,61446, -61447,61447,61448,61448,61449,61449,61450,61450,61451,61451,61452,61452,61453, -61453,61454,61454,61455,61455,61456,61456,61457,61457,61457,61458,61458,61459, -61459,61460,61460,61461,61461,61462,61462,61463,61463,61464,61464,61465,61465, -61466,61466,61467,61467,61468,61468,61468,61469,61469,61470,61470,61471,61471, -61472,61472,61473,61473,61474,61474,61475,61475,61476,61476,61477,61477,61478, -61478,61479,61479,61479,61480,61480,61481,61481,61482,61482,61483,61483,61484, -61484,61485,61485,61486,61486,61487,61487,61488,61488,61489,61489,61490,61490, -61490,61491,61491,61492,61492,61493,61493,61494,61494,61495,61495,61496,61496, -61497,61497,61498,61498,61499,61499,61500,61500,61501,61501,61501,61502,61502, -61503,61503,61504,61504,61505,61505,61506,61506,61507,61507,61508,61508,61509, -61509,61510,61510,61511,61511,61512,61512,61512,61513,61513,61514,61514,61515, -61515,61516,61516,61517,61517,61518,61518,61519,61519,61520,61520,61521,61521, -61522,61522,61523,61523,61523,61524,61524,61525,61525,61526,61526,61527,61527, -61528,61528,61529,61529,61530,61530,61531,61531,61532,61532,61533,61533,61534, -61534,61534,61535,61535,61536,61536,61537,61537,61538,61538,61539,61539,61540, -61540,61541,61541,61542,61542,61543,61543,61544,61544,61544,61545,61545,61546, -61546,61547,61547,61548,61548,61549,61549,61550,61550,61551,61551,61552,61552, -61553,61553,61554,61554,61555,61555,61555,61556,61556,61557,61557,61558,61558, -61559,61559,61560,61560,61561,61561,61562,61562,61563,61563,61564,61564,61565, -61565,61566,61566,61566,61567,61567,61568,61568,61569,61569,61570,61570,61571, -61571,61572,61572,61573,61573,61574,61574,61575,61575,61576,61576,61576,61577, -61577,61578,61578,61579,61579,61580,61580,61581,61581,61582,61582,61583,61583, -61584,61584,61585,61585,61586,61586,61587,61587,61587,61588,61588,61589,61589, -61590,61590,61591,61591,61592,61592,61593,61593,61594,61594,61595,61595,61596, -61596,61597,61597,61597,61598,61598,61599,61599,61600,61600,61601,61601,61602, -61602,61603,61603,61604,61604,61605,61605,61606,61606,61607,61607,61608,61608, -61608,61609,61609,61610,61610,61611,61611,61612,61612,61613,61613,61614,61614, -61615,61615,61616,61616,61617,61617,61618,61618,61618,61619,61619,61620,61620, -61621,61621,61622,61622,61623,61623,61624,61624,61625,61625,61626,61626,61627, -61627,61628,61628,61628,61629,61629,61630,61630,61631,61631,61632,61632,61633, -61633,61634,61634,61635,61635,61636,61636,61637,61637,61638,61638,61639,61639, -61639,61640,61640,61641,61641,61642,61642,61643,61643,61644,61644,61645,61645, -61646,61646,61647,61647,61648,61648,61649,61649,61649,61650,61650,61651,61651, -61652,61652,61653,61653,61654,61654,61655,61655,61656,61656,61657,61657,61658, -61658,61659,61659,61659,61660,61660,61661,61661,61662,61662,61663,61663,61664, -61664,61665,61665,61666,61666,61667,61667,61668,61668,61669,61669,61669,61670, -61670,61671,61671,61672,61672,61673,61673,61674,61674,61675,61675,61676,61676, -61677,61677,61678,61678,61679,61679,61679,61680,61680,61681,61681,61682,61682, -61683,61683,61684,61684,61685,61685,61686,61686,61687,61687,61688,61688,61689, -61689,61689,61690,61690,61691,61691,61692,61692,61693,61693,61694,61694,61695, -61695,61696,61696,61697,61697,61698,61698,61699,61699,61699,61700,61700,61701, -61701,61702,61702,61703,61703,61704,61704,61705,61705,61706,61706,61707,61707, -61708,61708,61709,61709,61709,61710,61710,61711,61711,61712,61712,61713,61713, -61714,61714,61715,61715,61716,61716,61717,61717,61718,61718,61719,61719,61719, -61720,61720,61721,61721,61722,61722,61723,61723,61724,61724,61725,61725,61726, -61726,61727,61727,61728,61728,61729,61729,61729,61730,61730,61731,61731,61732, -61732,61733,61733,61734,61734,61735,61735,61736,61736,61737,61737,61738,61738, -61739,61739,61739,61740,61740,61741,61741,61742,61742,61743,61743,61744,61744, -61745,61745,61746,61746,61747,61747,61748,61748,61749,61749,61749,61750,61750, -61751,61751,61752,61752,61753,61753,61754,61754,61755,61755,61756,61756,61757, -61757,61758,61758,61759,61759,61759,61760,61760,61761,61761,61762,61762,61763, -61763,61764,61764,61765,61765,61766,61766,61767,61767,61768,61768,61768,61769, -61769,61770,61770,61771,61771,61772,61772,61773,61773,61774,61774,61775,61775, -61776,61776,61777,61777,61778,61778,61778,61779,61779,61780,61780,61781,61781, -61782,61782,61783,61783,61784,61784,61785,61785,61786,61786,61787,61787,61788, -61788,61788,61789,61789,61790,61790,61791,61791,61792,61792,61793,61793,61794, -61794,61795,61795,61796,61796,61797,61797,61797,61798,61798,61799,61799,61800, -61800,61801,61801,61802,61802,61803,61803,61804,61804,61805,61805,61806,61806, -61807,61807,61807,61808,61808,61809,61809,61810,61810,61811,61811,61812,61812, -61813,61813,61814,61814,61815,61815,61816,61816,61816,61817,61817,61818,61818, -61819,61819,61820,61820,61821,61821,61822,61822,61823,61823,61824,61824,61825, -61825,61826,61826,61826,61827,61827,61828,61828,61829,61829,61830,61830,61831, -61831,61832,61832,61833,61833,61834,61834,61835,61835,61835,61836,61836,61837, -61837,61838,61838,61839,61839,61840,61840,61841,61841,61842,61842,61843,61843, -61844,61844,61844,61845,61845,61846,61846,61847,61847,61848,61848,61849,61849, -61850,61850,61851,61851,61852,61852,61853,61853,61854,61854,61854,61855,61855, -61856,61856,61857,61857,61858,61858,61859,61859,61860,61860,61861,61861,61862, -61862,61863,61863,61863,61864,61864,61865,61865,61866,61866,61867,61867,61868, -61868,61869,61869,61870,61870,61871,61871,61872,61872,61872,61873,61873,61874, -61874,61875,61875,61876,61876,61877,61877,61878,61878,61879,61879,61880,61880, -61881,61881,61882,61882,61882,61883,61883,61884,61884,61885,61885,61886,61886, -61887,61887,61888,61888,61889,61889,61890,61890,61891,61891,61891,61892,61892, -61893,61893,61894,61894,61895,61895,61896,61896,61897,61897,61898,61898,61899, -61899,61900,61900,61900,61901,61901,61902,61902,61903,61903,61904,61904,61905, -61905,61906,61906,61907,61907,61908,61908,61909,61909,61909,61910,61910,61911, -61911,61912,61912,61913,61913,61914,61914,61915,61915,61916,61916,61917,61917, -61918,61918,61918,61919,61919,61920,61920,61921,61921,61922,61922,61923,61923, -61924,61924,61925,61925,61926,61926,61927,61927,61927,61928,61928,61929,61929, -61930,61930,61931,61931,61932,61932,61933,61933,61934,61934,61935,61935,61936, -61936,61936,61937,61937,61938,61938,61939,61939,61940,61940,61941,61941,61942, -61942,61943,61943,61944,61944,61945,61945,61945,61946,61946,61947,61947,61948, -61948,61949,61949,61950,61950,61951,61951,61952,61952,61953,61953,61954,61954, -61954,61955,61955,61956,61956,61957,61957,61958,61958,61959,61959,61960,61960, -61961,61961,61962,61962,61963,61963,61963,61964,61964,61965,61965,61966,61966, -61967,61967,61968,61968,61969,61969,61970,61970,61971,61971,61972,61972,61972, -61973,61973,61974,61974,61975,61975,61976,61976,61977,61977,61978,61978,61979, -61979,61980,61980,61981,61981,61981,61982,61982,61983,61983,61984,61984,61985, -61985,61986,61986,61987,61987,61988,61988,61989,61989,61990,61990,61990,61991, -61991,61992,61992,61993,61993,61994,61994,61995,61995,61996,61996,61997,61997, -61998,61998,61999,61999,61999,62000,62000,62001,62001,62002,62002,62003,62003, -62004,62004,62005,62005,62006,62006,62007,62007,62007,62008,62008,62009,62009, -62010,62010,62011,62011,62012,62012,62013,62013,62014,62014,62015,62015,62016, -62016,62016,62017,62017,62018,62018,62019,62019,62020,62020,62021,62021,62022, -62022,62023,62023,62024,62024,62025,62025,62025,62026,62026,62027,62027,62028, -62028,62029,62029,62030,62030,62031,62031,62032,62032,62033,62033,62034,62034, -62034,62035,62035,62036,62036,62037,62037,62038,62038,62039,62039,62040,62040, -62041,62041,62042,62042,62042,62043,62043,62044,62044,62045,62045,62046,62046, -62047,62047,62048,62048,62049,62049,62050,62050,62051,62051,62051,62052,62052, -62053,62053,62054,62054,62055,62055,62056,62056,62057,62057,62058,62058,62059, -62059,62060,62060,62060,62061,62061,62062,62062,62063,62063,62064,62064,62065, -62065,62066,62066,62067,62067,62068,62068,62068,62069,62069,62070,62070,62071, -62071,62072,62072,62073,62073,62074,62074,62075,62075,62076,62076,62077,62077, -62077,62078,62078,62079,62079,62080,62080,62081,62081,62082,62082,62083,62083, -62084,62084,62085,62085,62085,62086,62086,62087,62087,62088,62088,62089,62089, -62090,62090,62091,62091,62092,62092,62093,62093,62094,62094,62094,62095,62095, -62096,62096,62097,62097,62098,62098,62099,62099,62100,62100,62101,62101,62102, -62102,62102,62103,62103,62104,62104,62105,62105,62106,62106,62107,62107,62108, -62108,62109,62109,62110,62110,62111,62111,62111,62112,62112,62113,62113,62114, -62114,62115,62115,62116,62116,62117,62117,62118,62118,62119,62119,62119,62120, -62120,62121,62121,62122,62122,62123,62123,62124,62124,62125,62125,62126,62126, -62127,62127,62127,62128,62128,62129,62129,62130,62130,62131,62131,62132,62132, -62133,62133,62134,62134,62135,62135,62136,62136,62136,62137,62137,62138,62138, -62139,62139,62140,62140,62141,62141,62142,62142,62143,62143,62144,62144,62144, -62145,62145,62146,62146,62147,62147,62148,62148,62149,62149,62150,62150,62151, -62151,62152,62152,62152,62153,62153,62154,62154,62155,62155,62156,62156,62157, -62157,62158,62158,62159,62159,62160,62160,62161,62161,62161,62162,62162,62163, -62163,62164,62164,62165,62165,62166,62166,62167,62167,62168,62168,62169,62169, -62169,62170,62170,62171,62171,62172,62172,62173,62173,62174,62174,62175,62175, -62176,62176,62177,62177,62177,62178,62178,62179,62179,62180,62180,62181,62181, -62182,62182,62183,62183,62184,62184,62185,62185,62185,62186,62186,62187,62187, -62188,62188,62189,62189,62190,62190,62191,62191,62192,62192,62193,62193,62193, -62194,62194,62195,62195,62196,62196,62197,62197,62198,62198,62199,62199,62200, -62200,62201,62201,62202,62202,62202,62203,62203,62204,62204,62205,62205,62206, -62206,62207,62207,62208,62208,62209,62209,62210,62210,62210,62211,62211,62212, -62212,62213,62213,62214,62214,62215,62215,62216,62216,62217,62217,62218,62218, -62218,62219,62219,62220,62220,62221,62221,62222,62222,62223,62223,62224,62224, -62225,62225,62226,62226,62226,62227,62227,62228,62228,62229,62229,62230,62230, -62231,62231,62232,62232,62233,62233,62234,62234,62234,62235,62235,62236,62236, -62237,62237,62238,62238,62239,62239,62240,62240,62241,62241,62242,62242,62242, -62243,62243,62244,62244,62245,62245,62246,62246,62247,62247,62248,62248,62249, -62249,62250,62250,62250,62251,62251,62252,62252,62253,62253,62254,62254,62255, -62255,62256,62256,62257,62257,62258,62258,62258,62259,62259,62260,62260,62261, -62261,62262,62262,62263,62263,62264,62264,62265,62265,62266,62266,62266,62267, -62267,62268,62268,62269,62269,62270,62270,62271,62271,62272,62272,62273,62273, -62274,62274,62274,62275,62275,62276,62276,62277,62277,62278,62278,62279,62279, -62280,62280,62281,62281,62282,62282,62282,62283,62283,62284,62284,62285,62285, -62286,62286,62287,62287,62288,62288,62289,62289,62290,62290,62290,62291,62291, -62292,62292,62293,62293,62294,62294,62295,62295,62296,62296,62297,62297,62298, -62298,62298,62299,62299,62300,62300,62301,62301,62302,62302,62303,62303,62304, -62304,62305,62305,62305,62306,62306,62307,62307,62308,62308,62309,62309,62310, -62310,62311,62311,62312,62312,62313,62313,62313,62314,62314,62315,62315,62316, -62316,62317,62317,62318,62318,62319,62319,62320,62320,62321,62321,62321,62322, -62322,62323,62323,62324,62324,62325,62325,62326,62326,62327,62327,62328,62328, -62329,62329,62329,62330,62330,62331,62331,62332,62332,62333,62333,62334,62334, -62335,62335,62336,62336,62337,62337,62337,62338,62338,62339,62339,62340,62340, -62341,62341,62342,62342,62343,62343,62344,62344,62344,62345,62345,62346,62346, -62347,62347,62348,62348,62349,62349,62350,62350,62351,62351,62352,62352,62352, -62353,62353,62354,62354,62355,62355,62356,62356,62357,62357,62358,62358,62359, -62359,62360,62360,62360,62361,62361,62362,62362,62363,62363,62364,62364,62365, -62365,62366,62366,62367,62367,62368,62368,62368,62369,62369,62370,62370,62371, -62371,62372,62372,62373,62373,62374,62374,62375,62375,62375,62376,62376,62377, -62377,62378,62378,62379,62379,62380,62380,62381,62381,62382,62382,62383,62383, -62383,62384,62384,62385,62385,62386,62386,62387,62387,62388,62388,62389,62389, -62390,62390,62390,62391,62391,62392,62392,62393,62393,62394,62394,62395,62395, -62396,62396,62397,62397,62398,62398,62398,62399,62399,62400,62400,62401,62401, -62402,62402,62403,62403,62404,62404,62405,62405,62406,62406,62406,62407,62407, -62408,62408,62409,62409,62410,62410,62411,62411,62412,62412,62413,62413,62413, -62414,62414,62415,62415,62416,62416,62417,62417,62418,62418,62419,62419,62420, -62420,62421,62421,62421,62422,62422,62423,62423,62424,62424,62425,62425,62426, -62426,62427,62427,62428,62428,62428,62429,62429,62430,62430,62431,62431,62432, -62432,62433,62433,62434,62434,62435,62435,62436,62436,62436,62437,62437,62438, -62438,62439,62439,62440,62440,62441,62441,62442,62442,62443,62443,62443,62444, -62444,62445,62445,62446,62446,62447,62447,62448,62448,62449,62449,62450,62450, -62451,62451,62451,62452,62452,62453,62453,62454,62454,62455,62455,62456,62456, -62457,62457,62458,62458,62458,62459,62459,62460,62460,62461,62461,62462,62462, -62463,62463,62464,62464,62465,62465,62466,62466,62466,62467,62467,62468,62468, -62469,62469,62470,62470,62471,62471,62472,62472,62473,62473,62473,62474,62474, -62475,62475,62476,62476,62477,62477,62478,62478,62479,62479,62480,62480,62480, -62481,62481,62482,62482,62483,62483,62484,62484,62485,62485,62486,62486,62487, -62487,62488,62488,62488,62489,62489,62490,62490,62491,62491,62492,62492,62493, -62493,62494,62494,62495,62495,62495,62496,62496,62497,62497,62498,62498,62499, -62499,62500,62500,62501,62501,62502,62502,62502,62503,62503,62504,62504,62505, -62505,62506,62506,62507,62507,62508,62508,62509,62509,62510,62510,62510,62511, -62511,62512,62512,62513,62513,62514,62514,62515,62515,62516,62516,62517,62517, -62517,62518,62518,62519,62519,62520,62520,62521,62521,62522,62522,62523,62523, -62524,62524,62524,62525,62525,62526,62526,62527,62527,62528,62528,62529,62529, -62530,62530,62531,62531,62532,62532,62532,62533,62533,62534,62534,62535,62535, -62536,62536,62537,62537,62538,62538,62539,62539,62539,62540,62540,62541,62541, -62542,62542,62543,62543,62544,62544,62545,62545,62546,62546,62546,62547,62547, -62548,62548,62549,62549,62550,62550,62551,62551,62552,62552,62553,62553,62553, -62554,62554,62555,62555,62556,62556,62557,62557,62558,62558,62559,62559,62560, -62560,62561,62561,62561,62562,62562,62563,62563,62564,62564,62565,62565,62566, -62566,62567,62567,62568,62568,62568,62569,62569,62570,62570,62571,62571,62572, -62572,62573,62573,62574,62574,62575,62575,62575,62576,62576,62577,62577,62578, -62578,62579,62579,62580,62580,62581,62581,62582,62582,62582,62583,62583,62584, -62584,62585,62585,62586,62586,62587,62587,62588,62588,62589,62589,62589,62590, -62590,62591,62591,62592,62592,62593,62593,62594,62594,62595,62595,62596,62596, -62596,62597,62597,62598,62598,62599,62599,62600,62600,62601,62601,62602,62602, -62603,62603,62603,62604,62604,62605,62605,62606,62606,62607,62607,62608,62608, -62609,62609,62610,62610,62610,62611,62611,62612,62612,62613,62613,62614,62614, -62615,62615,62616,62616,62617,62617,62618,62618,62618,62619,62619,62620,62620, -62621,62621,62622,62622,62623,62623,62624,62624,62625,62625,62625,62626,62626, -62627,62627,62628,62628,62629,62629,62630,62630,62631,62631,62632,62632,62632, -62633,62633,62634,62634,62635,62635,62636,62636,62637,62637,62638,62638,62639, -62639,62639,62640,62640,62641,62641,62642,62642,62643,62643,62644,62644,62645, -62645,62646,62646,62646,62647,62647,62648,62648,62649,62649,62650,62650,62651, -62651,62652,62652,62653,62653,62653,62654,62654,62655,62655,62656,62656,62657, -62657,62658,62658,62659,62659,62660,62660,62660,62661,62661,62662,62662,62663, -62663,62664,62664,62665,62665,62666,62666,62667,62667,62667,62668,62668,62669, -62669,62670,62670,62671,62671,62672,62672,62673,62673,62674,62674,62674,62675, -62675,62676,62676,62677,62677,62678,62678,62679,62679,62680,62680,62680,62681, -62681,62682,62682,62683,62683,62684,62684,62685,62685,62686,62686,62687,62687, -62687,62688,62688,62689,62689,62690,62690,62691,62691,62692,62692,62693,62693, -62694,62694,62694,62695,62695,62696,62696,62697,62697,62698,62698,62699,62699, -62700,62700,62701,62701,62701,62702,62702,62703,62703,62704,62704,62705,62705, -62706,62706,62707,62707,62708,62708,62708,62709,62709,62710,62710,62711,62711, -62712,62712,62713,62713,62714,62714,62715,62715,62715,62716,62716,62717,62717, -62718,62718,62719,62719,62720,62720,62721,62721,62722,62722,62722,62723,62723, -62724,62724,62725,62725,62726,62726,62727,62727,62728,62728,62729,62729,62729, -62730,62730,62731,62731,62732,62732,62733,62733,62734,62734,62735,62735,62735, -62736,62736,62737,62737,62738,62738,62739,62739,62740,62740,62741,62741,62742, -62742,62742,62743,62743,62744,62744,62745,62745,62746,62746,62747,62747,62748, -62748,62749,62749,62749,62750,62750,62751,62751,62752,62752,62753,62753,62754, -62754,62755,62755,62756,62756,62756,62757,62757,62758,62758,62759,62759,62760, -62760,62761,62761,62762,62762,62762,62763,62763,62764,62764,62765,62765,62766, -62766,62767,62767,62768,62768,62769,62769,62769,62770,62770,62771,62771,62772, -62772,62773,62773,62774,62774,62775,62775,62776,62776,62776,62777,62777,62778, -62778,62779,62779,62780,62780,62781,62781,62782,62782,62783,62783,62783,62784, -62784,62785,62785,62786,62786,62787,62787,62788,62788,62789,62789,62789,62790, -62790,62791,62791,62792,62792,62793,62793,62794,62794,62795,62795,62796,62796, -62796,62797,62797,62798,62798,62799,62799,62800,62800,62801,62801,62802,62802, -62803,62803,62803,62804,62804,62805,62805,62806,62806,62807,62807,62808,62808, -62809,62809,62809,62810,62810,62811,62811,62812,62812,62813,62813,62814,62814, -62815,62815,62816,62816,62816,62817,62817,62818,62818,62819,62819,62820,62820, -62821,62821,62822,62822,62823,62823,62823,62824,62824,62825,62825,62826,62826, -62827,62827,62828,62828,62829,62829,62829,62830,62830,62831,62831,62832,62832, -62833,62833,62834,62834,62835,62835,62836,62836,62836,62837,62837,62838,62838, -62839,62839,62840,62840,62841,62841,62842,62842,62842,62843,62843,62844,62844, -62845,62845,62846,62846,62847,62847,62848,62848,62849,62849,62849,62850,62850, -62851,62851,62852,62852,62853,62853,62854,62854,62855,62855,62856,62856,62856, -62857,62857,62858,62858,62859,62859,62860,62860,62861,62861,62862,62862,62862, -62863,62863,62864,62864,62865,62865,62866,62866,62867,62867,62868,62868,62869, -62869,62869,62870,62870,62871,62871,62872,62872,62873,62873,62874,62874,62875, -62875,62875,62876,62876,62877,62877,62878,62878,62879,62879,62880,62880,62881, -62881,62882,62882,62882,62883,62883,62884,62884,62885,62885,62886,62886,62887, -62887,62888,62888,62888,62889,62889,62890,62890,62891,62891,62892,62892,62893, -62893,62894,62894,62895,62895,62895,62896,62896,62897,62897,62898,62898,62899, -62899,62900,62900,62901,62901,62901,62902,62902,62903,62903,62904,62904,62905, -62905,62906,62906,62907,62907,62908,62908,62908,62909,62909,62910,62910,62911, -62911,62912,62912,62913,62913,62914,62914,62914,62915,62915,62916,62916,62917, -62917,62918,62918,62919,62919,62920,62920,62921,62921,62921,62922,62922,62923, -62923,62924,62924,62925,62925,62926,62926,62927,62927,62927,62928,62928,62929, -62929,62930,62930,62931,62931,62932,62932,62933,62933,62933,62934,62934,62935, -62935,62936,62936,62937,62937,62938,62938,62939,62939,62940,62940,62940,62941, -62941,62942,62942,62943,62943,62944,62944,62945,62945,62946,62946,62946,62947, -62947,62948,62948,62949,62949,62950,62950,62951,62951,62952,62952,62953,62953, -62953,62954,62954,62955,62955,62956,62956,62957,62957,62958,62958,62959,62959, -62959,62960,62960,62961,62961,62962,62962,62963,62963,62964,62964,62965,62965, -62965,62966,62966,62967,62967,62968,62968,62969,62969,62970,62970,62971,62971, -62972,62972,62972,62973,62973,62974,62974,62975,62975,62976,62976,62977,62977, -62978,62978,62978,62979,62979,62980,62980,62981,62981,62982,62982,62983,62983, -62984,62984,62984,62985,62985,62986,62986,62987,62987,62988,62988,62989,62989, -62990,62990,62991,62991,62991,62992,62992,62993,62993,62994,62994,62995,62995, -62996,62996,62997,62997,62997,62998,62998,62999,62999,63000,63000,63001,63001, -63002,63002,63003,63003,63003,63004,63004,63005,63005,63006,63006,63007,63007, -63008,63008,63009,63009,63010,63010,63010,63011,63011,63012,63012,63013,63013, -63014,63014,63015,63015,63016,63016,63016,63017,63017,63018,63018,63019,63019, -63020,63020,63021,63021,63022,63022,63022,63023,63023,63024,63024,63025,63025, -63026,63026,63027,63027,63028,63028,63028,63029,63029,63030,63030,63031,63031, -63032,63032,63033,63033,63034,63034,63035,63035,63035,63036,63036,63037,63037, -63038,63038,63039,63039,63040,63040,63041,63041,63041,63042,63042,63043,63043, -63044,63044,63045,63045,63046,63046,63047,63047,63047,63048,63048,63049,63049, -63050,63050,63051,63051,63052,63052,63053,63053,63053,63054,63054,63055,63055, -63056,63056,63057,63057,63058,63058,63059,63059,63059,63060,63060,63061,63061, -63062,63062,63063,63063,63064,63064,63065,63065,63066,63066,63066,63067,63067, -63068,63068,63069,63069,63070,63070,63071,63071,63072,63072,63072,63073,63073, -63074,63074,63075,63075,63076,63076,63077,63077,63078,63078,63078,63079,63079, -63080,63080,63081,63081,63082,63082,63083,63083,63084,63084,63084,63085,63085, -63086,63086,63087,63087,63088,63088,63089,63089,63090,63090,63090,63091,63091, -63092,63092,63093,63093,63094,63094,63095,63095,63096,63096,63096,63097,63097, -63098,63098,63099,63099,63100,63100,63101,63101,63102,63102,63102,63103,63103, -63104,63104,63105,63105,63106,63106,63107,63107,63108,63108,63109,63109,63109, -63110,63110,63111,63111,63112,63112,63113,63113,63114,63114,63115,63115,63115, -63116,63116,63117,63117,63118,63118,63119,63119,63120,63120,63121,63121,63121, -63122,63122,63123,63123,63124,63124,63125,63125,63126,63126,63127,63127,63127, -63128,63128,63129,63129,63130,63130,63131,63131,63132,63132,63133,63133,63133, -63134,63134,63135,63135,63136,63136,63137,63137,63138,63138,63139,63139,63139, -63140,63140,63141,63141,63142,63142,63143,63143,63144,63144,63145,63145,63145, -63146,63146,63147,63147,63148,63148,63149,63149,63150,63150,63151,63151,63151, -63152,63152,63153,63153,63154,63154,63155,63155,63156,63156,63157,63157,63157, -63158,63158,63159,63159,63160,63160,63161,63161,63162,63162,63163,63163,63163, -63164,63164,63165,63165,63166,63166,63167,63167,63168,63168,63169,63169,63169, -63170,63170,63171,63171,63172,63172,63173,63173,63174,63174,63175,63175,63175, -63176,63176,63177,63177,63178,63178,63179,63179,63180,63180,63181,63181,63181, -63182,63182,63183,63183,63184,63184,63185,63185,63186,63186,63187,63187,63187, -63188,63188,63189,63189,63190,63190,63191,63191,63192,63192,63193,63193,63193, -63194,63194,63195,63195,63196,63196,63197,63197,63198,63198,63199,63199,63199, -63200,63200,63201,63201,63202,63202,63203,63203,63204,63204,63205,63205,63205, -63206,63206,63207,63207,63208,63208,63209,63209,63210,63210,63211,63211,63211, -63212,63212,63213,63213,63214,63214,63215,63215,63216,63216,63217,63217,63217, -63218,63218,63219,63219,63220,63220,63221,63221,63222,63222,63223,63223,63223, -63224,63224,63225,63225,63226,63226,63227,63227,63228,63228,63229,63229,63229, -63230,63230,63231,63231,63232,63232,63233,63233,63234,63234,63234,63235,63235, -63236,63236,63237,63237,63238,63238,63239,63239,63240,63240,63240,63241,63241, -63242,63242,63243,63243,63244,63244,63245,63245,63246,63246,63246,63247,63247, -63248,63248,63249,63249,63250,63250,63251,63251,63252,63252,63252,63253,63253, -63254,63254,63255,63255,63256,63256,63257,63257,63258,63258,63258,63259,63259, -63260,63260,63261,63261,63262,63262,63263,63263,63264,63264,63264,63265,63265, -63266,63266,63267,63267,63268,63268,63269,63269,63270,63270,63270,63271,63271, -63272,63272,63273,63273,63274,63274,63275,63275,63276,63276,63276,63277,63277, -63278,63278,63279,63279,63280,63280,63281,63281,63281,63282,63282,63283,63283, -63284,63284,63285,63285,63286,63286,63287,63287,63287,63288,63288,63289,63289, -63290,63290,63291,63291,63292,63292,63293,63293,63293,63294,63294,63295,63295, -63296,63296,63297,63297,63298,63298,63299,63299,63299,63300,63300,63301,63301, -63302,63302,63303,63303,63304,63304,63305,63305,63305,63306,63306,63307,63307, -63308,63308,63309,63309,63310,63310,63310,63311,63311,63312,63312,63313,63313, -63314,63314,63315,63315,63316,63316,63316,63317,63317,63318,63318,63319,63319, -63320,63320,63321,63321,63322,63322,63322,63323,63323,63324,63324,63325,63325, -63326,63326,63327,63327,63328,63328,63328,63329,63329,63330,63330,63331,63331, -63332,63332,63333,63333,63333,63334,63334,63335,63335,63336,63336,63337,63337, -63338,63338,63339,63339,63339,63340,63340,63341,63341,63342,63342,63343,63343, -63344,63344,63345,63345,63345,63346,63346,63347,63347,63348,63348,63349,63349, -63350,63350,63351,63351,63351,63352,63352,63353,63353,63354,63354,63355,63355, -63356,63356,63356,63357,63357,63358,63358,63359,63359,63360,63360,63361,63361, -63362,63362,63362,63363,63363,63364,63364,63365,63365,63366,63366,63367,63367, -63368,63368,63368,63369,63369,63370,63370,63371,63371,63372,63372,63373,63373, -63373,63374,63374,63375,63375,63376,63376,63377,63377,63378,63378,63379,63379, -63379,63380,63380,63381,63381,63382,63382,63383,63383,63384,63384,63385,63385, -63385,63386,63386,63387,63387,63388,63388,63389,63389,63390,63390,63390,63391, -63391,63392,63392,63393,63393,63394,63394,63395,63395,63396,63396,63396,63397, -63397,63398,63398,63399,63399,63400,63400,63401,63401,63402,63402,63402,63403, -63403,63404,63404,63405,63405,63406,63406,63407,63407,63407,63408,63408,63409, -63409,63410,63410,63411,63411,63412,63412,63413,63413,63413,63414,63414,63415, -63415,63416,63416,63417,63417,63418,63418,63419,63419,63419,63420,63420,63421, -63421,63422,63422,63423,63423,63424,63424,63424,63425,63425,63426,63426,63427, -63427,63428,63428,63429,63429,63430,63430,63430,63431,63431,63432,63432,63433, -63433,63434,63434,63435,63435,63435,63436,63436,63437,63437,63438,63438,63439, -63439,63440,63440,63441,63441,63441,63442,63442,63443,63443,63444,63444,63445, -63445,63446,63446,63447,63447,63447,63448,63448,63449,63449,63450,63450,63451, -63451,63452,63452,63452,63453,63453,63454,63454,63455,63455,63456,63456,63457, -63457,63458,63458,63458,63459,63459,63460,63460,63461,63461,63462,63462,63463, -63463,63463,63464,63464,63465,63465,63466,63466,63467,63467,63468,63468,63469, -63469,63469,63470,63470,63471,63471,63472,63472,63473,63473,63474,63474,63474, -63475,63475,63476,63476,63477,63477,63478,63478,63479,63479,63480,63480,63480, -63481,63481,63482,63482,63483,63483,63484,63484,63485,63485,63485,63486,63486, -63487,63487,63488,63488,63489,63489,63490,63490,63491,63491,63491,63492,63492, -63493,63493,63494,63494,63495,63495,63496,63496,63496,63497,63497,63498,63498, -63499,63499,63500,63500,63501,63501,63502,63502,63502,63503,63503,63504,63504, -63505,63505,63506,63506,63507,63507,63507,63508,63508,63509,63509,63510,63510, -63511,63511,63512,63512,63513,63513,63513,63514,63514,63515,63515,63516,63516, -63517,63517,63518,63518,63518,63519,63519,63520,63520,63521,63521,63522,63522, -63523,63523,63524,63524,63524,63525,63525,63526,63526,63527,63527,63528,63528, -63529,63529,63529,63530,63530,63531,63531,63532,63532,63533,63533,63534,63534, -63535,63535,63535,63536,63536,63537,63537,63538,63538,63539,63539,63540,63540, -63540,63541,63541,63542,63542,63543,63543,63544,63544,63545,63545,63546,63546, -63546,63547,63547,63548,63548,63549,63549,63550,63550,63551,63551,63551,63552, -63552,63553,63553,63554,63554,63555,63555,63556,63556,63557,63557,63557,63558, -63558,63559,63559,63560,63560,63561,63561,63562,63562,63562,63563,63563,63564, -63564,63565,63565,63566,63566,63567,63567,63567,63568,63568,63569,63569,63570, -63570,63571,63571,63572,63572,63573,63573,63573,63574,63574,63575,63575,63576, -63576,63577,63577,63578,63578,63578,63579,63579,63580,63580,63581,63581,63582, -63582,63583,63583,63584,63584,63584,63585,63585,63586,63586,63587,63587,63588, -63588,63589,63589,63589,63590,63590,63591,63591,63592,63592,63593,63593,63594, -63594,63594,63595,63595,63596,63596,63597,63597,63598,63598,63599,63599,63600, -63600,63600,63601,63601,63602,63602,63603,63603,63604,63604,63605,63605,63605, -63606,63606,63607,63607,63608,63608,63609,63609,63610,63610,63611,63611,63611, -63612,63612,63613,63613,63614,63614,63615,63615,63616,63616,63616,63617,63617, -63618,63618,63619,63619,63620,63620,63621,63621,63621,63622,63622,63623,63623, -63624,63624,63625,63625,63626,63626,63627,63627,63627,63628,63628,63629,63629, -63630,63630,63631,63631,63632,63632,63632,63633,63633,63634,63634,63635,63635, -63636,63636,63637,63637,63637,63638,63638,63639,63639,63640,63640,63641,63641, -63642,63642,63643,63643,63643,63644,63644,63645,63645,63646,63646,63647,63647, -63648,63648,63648,63649,63649,63650,63650,63651,63651,63652,63652,63653,63653, -63653,63654,63654,63655,63655,63656,63656,63657,63657,63658,63658,63658,63659, -63659,63660,63660,63661,63661,63662,63662,63663,63663,63664,63664,63664,63665, -63665,63666,63666,63667,63667,63668,63668,63669,63669,63669,63670,63670,63671, -63671,63672,63672,63673,63673,63674,63674,63674,63675,63675,63676,63676,63677, -63677,63678,63678,63679,63679,63680,63680,63680,63681,63681,63682,63682,63683, -63683,63684,63684,63685,63685,63685,63686,63686,63687,63687,63688,63688,63689, -63689,63690,63690,63690,63691,63691,63692,63692,63693,63693,63694,63694,63695, -63695,63695,63696,63696,63697,63697,63698,63698,63699,63699,63700,63700,63701, -63701,63701,63702,63702,63703,63703,63704,63704,63705,63705,63706,63706,63706, -63707,63707,63708,63708,63709,63709,63710,63710,63711,63711,63711,63712,63712, -63713,63713,63714,63714,63715,63715,63716,63716,63716,63717,63717,63718,63718, -63719,63719,63720,63720,63721,63721,63722,63722,63722,63723,63723,63724,63724, -63725,63725,63726,63726,63727,63727,63727,63728,63728,63729,63729,63730,63730, -63731,63731,63732,63732,63732,63733,63733,63734,63734,63735,63735,63736,63736, -63737,63737,63737,63738,63738,63739,63739,63740,63740,63741,63741,63742,63742, -63742,63743,63743,63744,63744,63745,63745,63746,63746,63747,63747,63748,63748, -63748,63749,63749,63750,63750,63751,63751,63752,63752,63753,63753,63753,63754, -63754,63755,63755,63756,63756,63757,63757,63758,63758,63758,63759,63759,63760, -63760,63761,63761,63762,63762,63763,63763,63763,63764,63764,63765,63765,63766, -63766,63767,63767,63768,63768,63768,63769,63769,63770,63770,63771,63771,63772, -63772,63773,63773,63773,63774,63774,63775,63775,63776,63776,63777,63777,63778, -63778,63779,63779,63779,63780,63780,63781,63781,63782,63782,63783,63783,63784, -63784,63784,63785,63785,63786,63786,63787,63787,63788,63788,63789,63789,63789, -63790,63790,63791,63791,63792,63792,63793,63793,63794,63794,63794,63795,63795, -63796,63796,63797,63797,63798,63798,63799,63799,63799,63800,63800,63801,63801, -63802,63802,63803,63803,63804,63804,63804,63805,63805,63806,63806,63807,63807, -63808,63808,63809,63809,63809,63810,63810,63811,63811,63812,63812,63813,63813, -63814,63814,63814,63815,63815,63816,63816,63817,63817,63818,63818,63819,63819, -63819,63820,63820,63821,63821,63822,63822,63823,63823,63824,63824,63825,63825, -63825,63826,63826,63827,63827,63828,63828,63829,63829,63830,63830,63830,63831, -63831,63832,63832,63833,63833,63834,63834,63835,63835,63835,63836,63836,63837, -63837,63838,63838,63839,63839,63840,63840,63840,63841,63841,63842,63842,63843, -63843,63844,63844,63845,63845,63845,63846,63846,63847,63847,63848,63848,63849, -63849,63850,63850,63850,63851,63851,63852,63852,63853,63853,63854,63854,63855, -63855,63855,63856,63856,63857,63857,63858,63858,63859,63859,63860,63860,63860, -63861,63861,63862,63862,63863,63863,63864,63864,63865,63865,63865,63866,63866, -63867,63867,63868,63868,63869,63869,63870,63870,63870,63871,63871,63872,63872, -63873,63873,63874,63874,63875,63875,63875,63876,63876,63877,63877,63878,63878, -63879,63879,63880,63880,63880,63881,63881,63882,63882,63883,63883,63884,63884, -63885,63885,63885,63886,63886,63887,63887,63888,63888,63889,63889,63890,63890, -63890,63891,63891,63892,63892,63893,63893,63894,63894,63895,63895,63895,63896, -63896,63897,63897,63898,63898,63899,63899,63900,63900,63900,63901,63901,63902, -63902,63903,63903,63904,63904,63905,63905,63905,63906,63906,63907,63907,63908, -63908,63909,63909,63910,63910,63910,63911,63911,63912,63912,63913,63913,63914, -63914,63915,63915,63915,63916,63916,63917,63917,63918,63918,63919,63919,63920, -63920,63920,63921,63921,63922,63922,63923,63923,63924,63924,63925,63925,63925, -63926,63926,63927,63927,63928,63928,63929,63929,63930,63930,63930,63931,63931, -63932,63932,63933,63933,63934,63934,63935,63935,63935,63936,63936,63937,63937, -63938,63938,63939,63939,63940,63940,63940,63941,63941,63942,63942,63943,63943, -63944,63944,63945,63945,63945,63946,63946,63947,63947,63948,63948,63949,63949, -63950,63950,63950,63951,63951,63952,63952,63953,63953,63954,63954,63955,63955, -63955,63956,63956,63957,63957,63958,63958,63959,63959,63960,63960,63960,63961, -63961,63962,63962,63963,63963,63964,63964,63965,63965,63965,63966,63966,63967, -63967,63968,63968,63969,63969,63970,63970,63970,63971,63971,63972,63972,63973, -63973,63974,63974,63975,63975,63975,63976,63976,63977,63977,63978,63978,63979, -63979,63980,63980,63980,63981,63981,63982,63982,63983,63983,63984,63984,63984, -63985,63985,63986,63986,63987,63987,63988,63988,63989,63989,63989,63990,63990, -63991,63991,63992,63992,63993,63993,63994,63994,63994,63995,63995,63996,63996, -63997,63997,63998,63998,63999,63999,63999,64000,64000,64001,64001,64002,64002, -64003,64003,64004,64004,64004,64005,64005,64006,64006,64007,64007,64008,64008, -64009,64009,64009,64010,64010,64011,64011,64012,64012,64013,64013,64014,64014, -64014,64015,64015,64016,64016,64017,64017,64018,64018,64019,64019,64019,64020, -64020,64021,64021,64022,64022,64023,64023,64024,64024,64024,64025,64025,64026, -64026,64027,64027,64028,64028,64028,64029,64029,64030,64030,64031,64031,64032, -64032,64033,64033,64033,64034,64034,64035,64035,64036,64036,64037,64037,64038, -64038,64038,64039,64039,64040,64040,64041,64041,64042,64042,64043,64043,64043, -64044,64044,64045,64045,64046,64046,64047,64047,64048,64048,64048,64049,64049, -64050,64050,64051,64051,64052,64052,64053,64053,64053,64054,64054,64055,64055, -64056,64056,64057,64057,64057,64058,64058,64059,64059,64060,64060,64061,64061, -64062,64062,64062,64063,64063,64064,64064,64065,64065,64066,64066,64067,64067, -64067,64068,64068,64069,64069,64070,64070,64071,64071,64072,64072,64072,64073, -64073,64074,64074,64075,64075,64076,64076,64077,64077,64077,64078,64078,64079, -64079,64080,64080,64081,64081,64082,64082,64082,64083,64083,64084,64084,64085, -64085,64086,64086,64086,64087,64087,64088,64088,64089,64089,64090,64090,64091, -64091,64091,64092,64092,64093,64093,64094,64094,64095,64095,64096,64096,64096, -64097,64097,64098,64098,64099,64099,64100,64100,64101,64101,64101,64102,64102, -64103,64103,64104,64104,64105,64105,64106,64106,64106,64107,64107,64108,64108, -64109,64109,64110,64110,64110,64111,64111,64112,64112,64113,64113,64114,64114, -64115,64115,64115,64116,64116,64117,64117,64118,64118,64119,64119,64120,64120, -64120,64121,64121,64122,64122,64123,64123,64124,64124,64125,64125,64125,64126, -64126,64127,64127,64128,64128,64129,64129,64129,64130,64130,64131,64131,64132, -64132,64133,64133,64134,64134,64134,64135,64135,64136,64136,64137,64137,64138, -64138,64139,64139,64139,64140,64140,64141,64141,64142,64142,64143,64143,64144, -64144,64144,64145,64145,64146,64146,64147,64147,64148,64148,64148,64149,64149, -64150,64150,64151,64151,64152,64152,64153,64153,64153,64154,64154,64155,64155, -64156,64156,64157,64157,64158,64158,64158,64159,64159,64160,64160,64161,64161, -64162,64162,64163,64163,64163,64164,64164,64165,64165,64166,64166,64167,64167, -64167,64168,64168,64169,64169,64170,64170,64171,64171,64172,64172,64172,64173, -64173,64174,64174,64175,64175,64176,64176,64177,64177,64177,64178,64178,64179, -64179,64180,64180,64181,64181,64181,64182,64182,64183,64183,64184,64184,64185, -64185,64186,64186,64186,64187,64187,64188,64188,64189,64189,64190,64190,64191, -64191,64191,64192,64192,64193,64193,64194,64194,64195,64195,64195,64196,64196, -64197,64197,64198,64198,64199,64199,64200,64200,64200,64201,64201,64202,64202, -64203,64203,64204,64204,64205,64205,64205,64206,64206,64207,64207,64208,64208, -64209,64209,64209,64210,64210,64211,64211,64212,64212,64213,64213,64214,64214, -64214,64215,64215,64216,64216,64217,64217,64218,64218,64219,64219,64219,64220, -64220,64221,64221,64222,64222,64223,64223,64223,64224,64224,64225,64225,64226, -64226,64227,64227,64228,64228,64228,64229,64229,64230,64230,64231,64231,64232, -64232,64233,64233,64233,64234,64234,64235,64235,64236,64236,64237,64237,64237, -64238,64238,64239,64239,64240,64240,64241,64241,64242,64242,64242,64243,64243, -64244,64244,64245,64245,64246,64246,64247,64247,64247,64248,64248,64249,64249, -64250,64250,64251,64251,64251,64252,64252,64253,64253,64254,64254,64255,64255, -64256,64256,64256,64257,64257,64258,64258,64259,64259,64260,64260,64261,64261, -64261,64262,64262,64263,64263,64264,64264,64265,64265,64265,64266,64266,64267, -64267,64268,64268,64269,64269,64270,64270,64270,64271,64271,64272,64272,64273, -64273,64274,64274,64274,64275,64275,64276,64276,64277,64277,64278,64278,64279, -64279,64279,64280,64280,64281,64281,64282,64282,64283,64283,64284,64284,64284, -64285,64285,64286,64286,64287,64287,64288,64288,64288,64289,64289,64290,64290, -64291,64291,64292,64292,64293,64293,64293,64294,64294,64295,64295,64296,64296, -64297,64297,64297,64298,64298,64299,64299,64300,64300,64301,64301,64302,64302, -64302,64303,64303,64304,64304,64305,64305,64306,64306,64307,64307,64307,64308, -64308,64309,64309,64310,64310,64311,64311,64311,64312,64312,64313,64313,64314, -64314,64315,64315,64316,64316,64316,64317,64317,64318,64318,64319,64319,64320, -64320,64320,64321,64321,64322,64322,64323,64323,64324,64324,64325,64325,64325, -64326,64326,64327,64327,64328,64328,64329,64329,64329,64330,64330,64331,64331, -64332,64332,64333,64333,64334,64334,64334,64335,64335,64336,64336,64337,64337, -64338,64338,64339,64339,64339,64340,64340,64341,64341,64342,64342,64343,64343, -64343,64344,64344,64345,64345,64346,64346,64347,64347,64348,64348,64348,64349, -64349,64350,64350,64351,64351,64352,64352,64352,64353,64353,64354,64354,64355, -64355,64356,64356,64357,64357,64357,64358,64358,64359,64359,64360,64360,64361, -64361,64361,64362,64362,64363,64363,64364,64364,64365,64365,64366,64366,64366, -64367,64367,64368,64368,64369,64369,64370,64370,64370,64371,64371,64372,64372, -64373,64373,64374,64374,64375,64375,64375,64376,64376,64377,64377,64378,64378, -64379,64379,64379,64380,64380,64381,64381,64382,64382,64383,64383,64384,64384, -64384,64385,64385,64386,64386,64387,64387,64388,64388,64388,64389,64389,64390, -64390,64391,64391,64392,64392,64393,64393,64393,64394,64394,64395,64395,64396, -64396,64397,64397,64397,64398,64398,64399,64399,64400,64400,64401,64401,64402, -64402,64402,64403,64403,64404,64404,64405,64405,64406,64406,64406,64407,64407, -64408,64408,64409,64409,64410,64410,64411,64411,64411,64412,64412,64413,64413, -64414,64414,64415,64415,64415,64416,64416,64417,64417,64418,64418,64419,64419, -64420,64420,64420,64421,64421,64422,64422,64423,64423,64424,64424,64424,64425, -64425,64426,64426,64427,64427,64428,64428,64429,64429,64429,64430,64430,64431, -64431,64432,64432,64433,64433,64433,64434,64434,64435,64435,64436,64436,64437, -64437,64438,64438,64438,64439,64439,64440,64440,64441,64441,64442,64442,64442, -64443,64443,64444,64444,64445,64445,64446,64446,64446,64447,64447,64448,64448, -64449,64449,64450,64450,64451,64451,64451,64452,64452,64453,64453,64454,64454, -64455,64455,64455,64456,64456,64457,64457,64458,64458,64459,64459,64460,64460, -64460,64461,64461,64462,64462,64463,64463,64464,64464,64464,64465,64465,64466, -64466,64467,64467,64468,64468,64469,64469,64469,64470,64470,64471,64471,64472, -64472,64473,64473,64473,64474,64474,64475,64475,64476,64476,64477,64477,64477, -64478,64478,64479,64479,64480,64480,64481,64481,64482,64482,64482,64483,64483, -64484,64484,64485,64485,64486,64486,64486,64487,64487,64488,64488,64489,64489, -64490,64490,64491,64491,64491,64492,64492,64493,64493,64494,64494,64495,64495, -64495,64496,64496,64497,64497,64498,64498,64499,64499,64500,64500,64500,64501, -64501,64502,64502,64503,64503,64504,64504,64504,64505,64505,64506,64506,64507, -64507,64508,64508,64508,64509,64509,64510,64510,64511,64511,64512,64512,64513, -64513,64513,64514,64514,64515,64515,64516,64516,64517,64517,64517,64518,64518, -64519,64519,64520,64520,64521,64521,64521,64522,64522,64523,64523,64524,64524, -64525,64525,64526,64526,64526,64527,64527,64528,64528,64529,64529,64530,64530, -64530,64531,64531,64532,64532,64533,64533,64534,64534,64535,64535,64535,64536, -64536,64537,64537,64538,64538,64539,64539,64539,64540,64540,64541,64541,64542, -64542,64543,64543,64543,64544,64544,64545,64545,64546,64546,64547,64547,64548, -64548,64548,64549,64549,64550,64550,64551,64551,64552,64552,64552,64553,64553, -64554,64554,64555,64555,64556,64556,64556,64557,64557,64558,64558,64559,64559, -64560,64560,64561,64561,64561,64562,64562,64563,64563,64564,64564,64565,64565, -64565,64566,64566,64567,64567,64568,64568,64569,64569,64569,64570,64570,64571, -64571,64572,64572,64573,64573,64574,64574,64574,64575,64575,64576,64576,64577, -64577,64578,64578,64578,64579,64579,64580,64580,64581,64581,64582,64582,64582, -64583,64583,64584,64584,64585,64585,64586,64586,64587,64587,64587,64588,64588, -64589,64589,64590,64590,64591,64591,64591,64592,64592,64593,64593,64594,64594, -64595,64595,64595,64596,64596,64597,64597,64598,64598,64599,64599,64600,64600, -64600,64601,64601,64602,64602,64603,64603,64604,64604,64604,64605,64605,64606, -64606,64607,64607,64608,64608,64608,64609,64609,64610,64610,64611,64611,64612, -64612,64613,64613,64613,64614,64614,64615,64615,64616,64616,64617,64617,64617, -64618,64618,64619,64619,64620,64620,64621,64621,64621,64622,64622,64623,64623, -64624,64624,64625,64625,64625,64626,64626,64627,64627,64628,64628,64629,64629, -64630,64630,64630,64631,64631,64632,64632,64633,64633,64634,64634,64634,64635, -64635,64636,64636,64637,64637,64638,64638,64638,64639,64639,64640,64640,64641, -64641,64642,64642,64643,64643,64643,64644,64644,64645,64645,64646,64646,64647, -64647,64647,64648,64648,64649,64649,64650,64650,64651,64651,64651,64652,64652, -64653,64653,64654,64654,64655,64655,64655,64656,64656,64657,64657,64658,64658, -64659,64659,64660,64660,64660,64661,64661,64662,64662,64663,64663,64664,64664, -64664,64665,64665,64666,64666,64667,64667,64668,64668,64668,64669,64669,64670, -64670,64671,64671,64672,64672,64672,64673,64673,64674,64674,64675,64675,64676, -64676,64677,64677,64677,64678,64678,64679,64679,64680,64680,64681,64681,64681, -64682,64682,64683,64683,64684,64684,64685,64685,64685,64686,64686,64687,64687, -64688,64688,64689,64689,64689,64690,64690,64691,64691,64692,64692,64693,64693, -64694,64694,64694,64695,64695,64696,64696,64697,64697,64698,64698,64698,64699, -64699,64700,64700,64701,64701,64702,64702,64702,64703,64703,64704,64704,64705, -64705,64706,64706,64706,64707,64707,64708,64708,64709,64709,64710,64710,64711, -64711,64711,64712,64712,64713,64713,64714,64714,64715,64715,64715,64716,64716, -64717,64717,64718,64718,64719,64719,64719,64720,64720,64721,64721,64722,64722, -64723,64723,64723,64724,64724,64725,64725,64726,64726,64727,64727,64727,64728, -64728,64729,64729,64730,64730,64731,64731,64732,64732,64732,64733,64733,64734, -64734,64735,64735,64736,64736,64736,64737,64737,64738,64738,64739,64739,64740, -64740,64740,64741,64741,64742,64742,64743,64743,64744,64744,64744,64745,64745, -64746,64746,64747,64747,64748,64748,64748,64749,64749,64750,64750,64751,64751, -64752,64752,64753,64753,64753,64754,64754,64755,64755,64756,64756,64757,64757, -64757,64758,64758,64759,64759,64760,64760,64761,64761,64761,64762,64762,64763, -64763,64764,64764,64765,64765,64765,64766,64766,64767,64767,64768,64768,64769, -64769,64769,64770,64770,64771,64771,64772,64772,64773,64773,64773,64774,64774, -64775,64775,64776,64776,64777,64777,64778,64778,64778,64779,64779,64780,64780, -64781,64781,64782,64782,64782,64783,64783,64784,64784,64785,64785,64786,64786, -64786,64787,64787,64788,64788,64789,64789,64790,64790,64790,64791,64791,64792, -64792,64793,64793,64794,64794,64794,64795,64795,64796,64796,64797,64797,64798, -64798,64798,64799,64799,64800,64800,64801,64801,64802,64802,64803,64803,64803, -64804,64804,64805,64805,64806,64806,64807,64807,64807,64808,64808,64809,64809, -64810,64810,64811,64811,64811,64812,64812,64813,64813,64814,64814,64815,64815, -64815,64816,64816,64817,64817,64818,64818,64819,64819,64819,64820,64820,64821, -64821,64822,64822,64823,64823,64823,64824,64824,64825,64825,64826,64826,64827, -64827,64827,64828,64828,64829,64829,64830,64830,64831,64831,64832,64832,64832, -64833,64833,64834,64834,64835,64835,64836,64836,64836,64837,64837,64838,64838, -64839,64839,64840,64840,64840,64841,64841,64842,64842,64843,64843,64844,64844, -64844,64845,64845,64846,64846,64847,64847,64848,64848,64848,64849,64849,64850, -64850,64851,64851,64852,64852,64852,64853,64853,64854,64854,64855,64855,64856, -64856,64856,64857,64857,64858,64858,64859,64859,64860,64860,64860,64861,64861, -64862,64862,64863,64863,64864,64864,64864,64865,64865,64866,64866,64867,64867, -64868,64868,64869,64869,64869,64870,64870,64871,64871,64872,64872,64873,64873, -64873,64874,64874,64875,64875,64876,64876,64877,64877,64877,64878,64878,64879, -64879,64880,64880,64881,64881,64881,64882,64882,64883,64883,64884,64884,64885, -64885,64885,64886,64886,64887,64887,64888,64888,64889,64889,64889,64890,64890, -64891,64891,64892,64892,64893,64893,64893,64894,64894,64895,64895,64896,64896, -64897,64897,64897,64898,64898,64899,64899,64900,64900,64901,64901,64901,64902, -64902,64903,64903,64904,64904,64905,64905,64905,64906,64906,64907,64907,64908, -64908,64909,64909,64909,64910,64910,64911,64911,64912,64912,64913,64913,64913, -64914,64914,64915,64915,64916,64916,64917,64917,64917,64918,64918,64919,64919, -64920,64920,64921,64921,64921,64922,64922,64923,64923,64924,64924,64925,64925, -64926,64926,64926,64927,64927,64928,64928,64929,64929,64930,64930,64930,64931, -64931,64932,64932,64933,64933,64934,64934,64934,64935,64935,64936,64936,64937, -64937,64938,64938,64938,64939,64939,64940,64940,64941,64941,64942,64942,64942, -64943,64943,64944,64944,64945,64945,64946,64946,64946,64947,64947,64948,64948, -64949,64949,64950,64950,64950,64951,64951,64952,64952,64953,64953,64954,64954, -64954,64955,64955,64956,64956,64957,64957,64958,64958,64958,64959,64959,64960, -64960,64961,64961,64962,64962,64962,64963,64963,64964,64964,64965,64965,64966, -64966,64966,64967,64967,64968,64968,64969,64969,64970,64970,64970,64971,64971, -64972,64972,64973,64973,64974,64974,64974,64975,64975,64976,64976,64977,64977, -64978,64978,64978,64979,64979,64980,64980,64981,64981,64982,64982,64982,64983, -64983,64984,64984,64985,64985,64986,64986,64986,64987,64987,64988,64988,64989, -64989,64990,64990,64990,64991,64991,64992,64992,64993,64993,64994,64994,64994, -64995,64995,64996,64996,64997,64997,64998,64998,64998,64999,64999,65000,65000, -65001,65001,65002,65002,65002,65003,65003,65004,65004,65005,65005,65006,65006, -65006,65007,65007,65008,65008,65009,65009,65010,65010,65010,65011,65011,65012, -65012,65013,65013,65014,65014,65014,65015,65015,65016,65016,65017,65017,65018, -65018,65018,65019,65019,65020,65020,65021,65021,65022,65022,65022,65023,65023, -65024,65024,65025,65025,65026,65026,65026,65027,65027,65028,65028,65029,65029, -65030,65030,65030,65031,65031,65032,65032,65033,65033,65034,65034,65034,65035, -65035,65036,65036,65037,65037,65038,65038,65038,65039,65039,65040,65040,65041, -65041,65042,65042,65042,65043,65043,65044,65044,65045,65045,65046,65046,65046, -65047,65047,65048,65048,65049,65049,65050,65050,65050,65051,65051,65052,65052, -65053,65053,65054,65054,65054,65055,65055,65056,65056,65057,65057,65058,65058, -65058,65059,65059,65060,65060,65061,65061,65062,65062,65062,65063,65063,65064, -65064,65065,65065,65065,65066,65066,65067,65067,65068,65068,65069,65069,65069, -65070,65070,65071,65071,65072,65072,65073,65073,65073,65074,65074,65075,65075, -65076,65076,65077,65077,65077,65078,65078,65079,65079,65080,65080,65081,65081, -65081,65082,65082,65083,65083,65084,65084,65085,65085,65085,65086,65086,65087, -65087,65088,65088,65089,65089,65089,65090,65090,65091,65091,65092,65092,65093, -65093,65093,65094,65094,65095,65095,65096,65096,65097,65097,65097,65098,65098, -65099,65099,65100,65100,65101,65101,65101,65102,65102,65103,65103,65104,65104, -65105,65105,65105,65106,65106,65107,65107,65108,65108,65109,65109,65109,65110, -65110,65111,65111,65112,65112,65113,65113,65113,65114,65114,65115,65115,65116, -65116,65117,65117,65117,65118,65118,65119,65119,65120,65120,65120,65121,65121, -65122,65122,65123,65123,65124,65124,65124,65125,65125,65126,65126,65127,65127, -65128,65128,65128,65129,65129,65130,65130,65131,65131,65132,65132,65132,65133, -65133,65134,65134,65135,65135,65136,65136,65136,65137,65137,65138,65138,65139, -65139,65140,65140,65140,65141,65141,65142,65142,65143,65143,65144,65144,65144, -65145,65145,65146,65146,65147,65147,65148,65148,65148,65149,65149,65150,65150, -65151,65151,65152,65152,65152,65153,65153,65154,65154,65155,65155,65156,65156, -65156,65157,65157,65158,65158,65159,65159,65159,65160,65160,65161,65161,65162, -65162,65163,65163,65163,65164,65164,65165,65165,65166,65166,65167,65167,65167, -65168,65168,65169,65169,65170,65170,65171,65171,65171,65172,65172,65173,65173, -65174,65174,65175,65175,65175,65176,65176,65177,65177,65178,65178,65179,65179, -65179,65180,65180,65181,65181,65182,65182,65183,65183,65183,65184,65184,65185, -65185,65186,65186,65187,65187,65187,65188,65188,65189,65189,65190,65190,65190, -65191,65191,65192,65192,65193,65193,65194,65194,65194,65195,65195,65196,65196, -65197,65197,65198,65198,65198,65199,65199,65200,65200,65201,65201,65202,65202, -65202,65203,65203,65204,65204,65205,65205,65206,65206,65206,65207,65207,65208, -65208,65209,65209,65210,65210,65210,65211,65211,65212,65212,65213,65213,65213, -65214,65214,65215,65215,65216,65216,65217,65217,65217,65218,65218,65219,65219, -65220,65220,65221,65221,65221,65222,65222,65223,65223,65224,65224,65225,65225, -65225,65226,65226,65227,65227,65228,65228,65229,65229,65229,65230,65230,65231, -65231,65232,65232,65233,65233,65233,65234,65234,65235,65235,65236,65236,65237, -65237,65237,65238,65238,65239,65239,65240,65240,65240,65241,65241,65242,65242, -65243,65243,65244,65244,65244,65245,65245,65246,65246,65247,65247,65248,65248, -65248,65249,65249,65250,65250,65251,65251,65252,65252,65252,65253,65253,65254, -65254,65255,65255,65256,65256,65256,65257,65257,65258,65258,65259,65259,65259, -65260,65260,65261,65261,65262,65262,65263,65263,65263,65264,65264,65265,65265, -65266,65266,65267,65267,65267,65268,65268,65269,65269,65270,65270,65271,65271, -65271,65272,65272,65273,65273,65274,65274,65275,65275,65275,65276,65276,65277, -65277,65278,65278,65278,65279,65279,65280,65280,65281,65281,65282,65282,65282, -65283,65283,65284,65284,65285,65285,65286,65286,65286,65287,65287,65288,65288, -65289,65289,65290,65290,65290,65291,65291,65292,65292,65293,65293,65294,65294, -65294,65295,65295,65296,65296,65297,65297,65297,65298,65298,65299,65299,65300, -65300,65301,65301,65301,65302,65302,65303,65303,65304,65304,65305,65305,65305, -65306,65306,65307,65307,65308,65308,65309,65309,65309,65310,65310,65311,65311, -65312,65312,65313,65313,65313,65314,65314,65315,65315,65316,65316,65316,65317, -65317,65318,65318,65319,65319,65320,65320,65320,65321,65321,65322,65322,65323, -65323,65324,65324,65324,65325,65325,65326,65326,65327,65327,65328,65328,65328, -65329,65329,65330,65330,65331,65331,65331,65332,65332,65333,65333,65334,65334, -65335,65335,65335,65336,65336,65337,65337,65338,65338,65339,65339,65339,65340, -65340,65341,65341,65342,65342,65343,65343,65343,65344,65344,65345,65345,65346, -65346,65346,65347,65347,65348,65348,65349,65349,65350,65350,65350,65351,65351, -65352,65352,65353,65353,65354,65354,65354,65355,65355,65356,65356,65357,65357, -65358,65358,65358,65359,65359,65360,65360,65361,65361,65361,65362,65362,65363, -65363,65364,65364,65365,65365,65365,65366,65366,65367,65367,65368,65368,65369, -65369,65369,65370,65370,65371,65371,65372,65372,65373,65373,65373,65374,65374, -65375,65375,65376,65376,65376,65377,65377,65378,65378,65379,65379,65380,65380, -65380,65381,65381,65382,65382,65383,65383,65384,65384,65384,65385,65385,65386, -65386,65387,65387,65388,65388,65388,65389,65389,65390,65390,65391,65391,65391, -65392,65392,65393,65393,65394,65394,65395,65395,65395,65396,65396,65397,65397, -65398,65398,65399,65399,65399,65400,65400,65401,65401,65402,65402,65403,65403, -65403,65404,65404,65405,65405,65406,65406,65406,65407,65407,65408,65408,65409, -65409,65410,65410,65410,65411,65411,65412,65412,65413,65413,65414,65414,65414, -65415,65415,65416,65416,65417,65417,65417,65418,65418,65419,65419,65420,65420, -65421,65421,65421,65422,65422,65423,65423,65424,65424,65425,65425,65425,65426, -65426,65427,65427,65428,65428,65428,65429,65429,65430,65430,65431,65431,65432, -65432,65432,65433,65433,65434,65434,65435,65435,65436,65436,65436,65437,65437, -65438,65438,65439,65439,65440,65440,65440,65441,65441,65442,65442,65443,65443, -65443,65444,65444,65445,65445,65446,65446,65447,65447,65447,65448,65448,65449, -65449,65450,65450,65451,65451,65451,65452,65452,65453,65453,65454,65454,65454, -65455,65455,65456,65456,65457,65457,65458,65458,65458,65459,65459,65460,65460, -65461,65461,65462,65462,65462,65463,65463,65464,65464,65465,65465,65465,65466, -65466,65467,65467,65468,65468,65469,65469,65469,65470,65470,65471,65471,65472, -65472,65473,65473,65473,65474,65474,65475,65475,65476,65476,65476,65477,65477, -65478,65478,65479,65479,65480,65480,65480,65481,65481,65482,65482,65483,65483, -65484,65484,65484,65485,65485,65486,65486,65487,65487,65487,65488,65488,65489, -65489,65490,65490,65491,65491,65491,65492,65492,65493,65493,65494,65494,65495, -65495,65495,65496,65496,65497,65497,65498,65498,65498,65499,65499,65500,65500, -65501,65501,65502,65502,65502,65503,65503,65504,65504,65505,65505,65506,65506, -65506,65507,65507,65508,65508,65509,65509,65509,65510,65510,65511,65511,65512, -65512,65513,65513,65513,65514,65514,65515,65515,65516,65516,65517,65517,65517, -65518,65518,65519,65519,65520,65520,65520,65521,65521,65522,65522,65523,65523, -65524,65524,65524,65525,65525,65526,65526,65527,65527,65528,65528,65528,65529, -65529,65530,65530,65531,65531,65531,65532,65532,65533,65533,65534,65534,65535, -65535 -}; - diff --git a/extensions/cairo.c b/extensions/cairo.c index 64af7be..56413a2 100644 --- a/extensions/cairo.c +++ b/extensions/cairo.c @@ -17,10 +17,11 @@ */ #include +#include +#include #include "babl.h" #include "base/util.h" -#include "extensions/cairo-tables.h" int init (void); @@ -30,12 +31,14 @@ conv_rgba8_cairo24_le (unsigned char *src, unsigned char *dst, long samples) long n = samples; while (n--) { - dst[0] = src[2]; - dst[1] = src[1]; - dst[2] = src[0]; - dst[3] = src[0]; - src+=4; - dst+=4; + unsigned char red = *src++; + unsigned char green = *src++; + unsigned char blue = *src++; + *dst++ = blue; + *dst++ = green; + *dst++ = red; + *dst++ = 255; + src++; } return samples; } @@ -46,12 +49,13 @@ conv_rgb8_cairo24_le (unsigned char *src, unsigned char *dst, long samples) long n = samples; while (n--) { - dst[0] = src[2]; - dst[1] = src[1]; - dst[2] = src[0]; - dst[3] = src[0]; - src+=3; - dst+=4; + unsigned char red = *src++; + unsigned char green = *src++; + unsigned char blue = *src++; + *dst++ = blue; + *dst++ = green; + *dst++ = red; + *dst++ = 255; } return samples; } @@ -62,12 +66,15 @@ conv_rgbA8_premul_cairo32_le (unsigned char *src, unsigned char *dst, long sampl long n = samples; while (n--) { - dst[0] = src[2]; - dst[1] = src[1]; - dst[2] = src[0]; - dst[3] = src[3]; - src+=4; - dst+=4; + unsigned char red = *src++; + unsigned char green = *src++; + unsigned char blue = *src++; + unsigned char alpha = *src++; + + *dst++ = blue; + *dst++ = green; + *dst++ = red; + *dst++ = alpha; } return samples; } @@ -78,68 +85,62 @@ conv_rgbA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples) long n = samples; while (n--) { -#define div_255(a) ((((a)+127)+(((a)+127)>>8))>>8) - dst[0] = div_255 (src[2] * src[3]); - dst[1] = div_255 (src[1] * src[3]); - dst[2] = div_255 (src[0] * src[3]); + unsigned char red = *src++; + unsigned char green = *src++; + unsigned char blue = *src++; + unsigned char alpha = *src++; + +#define div_255(a) ((((a)+128)+(((a)+128)>>8))>>8) + *dst++ = div_255 (blue * alpha); + *dst++ = div_255 (green * alpha); + *dst++ = div_255 (red * alpha); #undef div_255 - dst[3] = src[3]; - src+=4; - dst+=4; + *dst++ = alpha; } return samples; } -static inline unsigned char -conv_rgbafloat_cairo32_map (float value, - float alpha) -{ - unsigned short index; - float result; - if (value < 0.0) - return 0; - else if (value > 1.0) - return 0xFF; - index = (unsigned short)(value * 0xFFFF); - result = linear_to_gamma16[index] / 257.0; /* 65535.0 / 255.0 */ - - return (result * alpha) + 0.5f; -} - static long -conv_rgbafloat_cairo32_le (unsigned char *src_char, +conv_rgbafloat_cairo32_le (unsigned char *src, unsigned char *dst, long samples) { - long n = samples; - float *src = (float*)src_char; + float *fsrc = (float *) src; + unsigned char *cdst = (unsigned char *) dst; + int n = samples; while (n--) { - if (src[3] < BABL_ALPHA_THRESHOLD) - { - *(int *)dst = 0; - } + float red = *fsrc++; + float green = *fsrc++; + float blue = *fsrc++; + float alpha = *fsrc++; + if (alpha >= 1.0) + { + int val = babl_linear_to_gamma_2_2f (blue) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = babl_linear_to_gamma_2_2f (green) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = babl_linear_to_gamma_2_2f (red) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + *cdst++ = 0xff; + } + else if (alpha <= 0.0) + { + (*(uint32_t*)cdst)=0; + cdst+=4; + } else - { - if (src[3] >= 1.0) - { - dst[0] = conv_rgbafloat_cairo32_map (src[2], 1.0f); - dst[1] = conv_rgbafloat_cairo32_map (src[1], 1.0f); - dst[2] = conv_rgbafloat_cairo32_map (src[0], 1.0f); - dst[3] = 0xFF; - } - else - { - dst[0] = conv_rgbafloat_cairo32_map (src[2], src[3]); - dst[1] = conv_rgbafloat_cairo32_map (src[1], src[3]); - dst[2] = conv_rgbafloat_cairo32_map (src[0], src[3]); - dst[3] = src[3] * 0xFF + 0.5f; - } - } - - src += 4; - dst += 4; + { + float balpha = alpha * 0xff; + int val = babl_linear_to_gamma_2_2f (blue) * balpha + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = babl_linear_to_gamma_2_2f (green) * balpha + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = babl_linear_to_gamma_2_2f (red) * balpha + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + *cdst++ = balpha + 0.5f; + } } return samples; } @@ -217,6 +218,7 @@ init (void) babl_type ("u8"), babl_component ("A"), NULL - ); + ); + return 0; } diff --git a/extensions/fast-float.c b/extensions/fast-float.c index fd7fb9f..162b3f5 100644 --- a/extensions/fast-float.c +++ b/extensions/fast-float.c @@ -28,7 +28,7 @@ #define INLINE inline -#define LSHIFT 2 +#define LSHIFT 4 typedef float (* BablLookupFunction) (float value, void *data); @@ -39,8 +39,9 @@ typedef struct BablLookup BablLookupFunction function; void *data; int shift; - uint32_t positive_min, positive_max, negative_min, negative_max; - uint32_t bitmask[babl_LOOKUP_MAX_ENTRIES/32]; + uint32_t positive_min, positive_max, negative_min, negative_max; + uint32_t bitmask[babl_LOOKUP_MAX_ENTRIES/32]; + int entries; float table[]; } BablLookup; @@ -54,44 +55,73 @@ static BablLookup *babl_lookup_new (BablLookupFunction function, static void babl_lookup_free (BablLookup *lookup); #endif +#include static inline float babl_lookup (BablLookup *lookup, - float number) + float number) { - union - { - float f; - uint32_t i; - } u; + union { float f; uint32_t i; } u; + union { float f; uint32_t i; } ub; + union { float f; uint32_t i; } ua; + uint32_t i; + float dx = 0.0; u.f = number; - i = (u.i << LSHIFT )>> lookup->shift; + i = (u.i << LSHIFT ) >> lookup->shift; + + if (i > lookup->positive_min && i < lookup->positive_max) + { + ua.i = ((i) << lookup->shift) >> LSHIFT; + ub.i = ((i+ 1) << lookup->shift) >> LSHIFT; - if (i > lookup->positive_min && - i < lookup->positive_max) i = i - lookup->positive_min; - else if (i > lookup->negative_min && - i < lookup->negative_max) + } + else if (i > lookup->negative_min && i < lookup->negative_max) + { + + ua.i = ((i) << lookup->shift) >> LSHIFT; + ub.i = ((i+ 1) << lookup->shift) >> LSHIFT; + i = i - lookup->negative_min + (lookup->positive_max - lookup->positive_min); + } else + { return lookup->function (number, lookup->data); + } + + { + uint32_t bm =u.i & 0b11110000000000000000000000000000; + ua.i |= bm; + ub.i |= bm; + } + dx = (u.f-ua.f) / (ub.f - ua.f); + + { - if (!(lookup->bitmask[i/32] & (1<<(i & 31)))) + if (!(lookup->bitmask[i/32] & (1UL<<(i & 31)))) { - /* XXX: should look up the value in the middle of the range - * that yields a given value, - * - * potentially even do linear interpolation between - * the two neighbour values to get away with a tiny - * lookup table.. - */ - lookup->table[i]= lookup->function (number, lookup->data); - lookup->bitmask[i/32] |= (1<<(i & 31)); + lookup->table[i]= lookup->function (ua.f, lookup->data); + lookup->bitmask[i/32] |= (1UL<<(i & 31)); + } + i++; + if (i< lookup->entries-2) + { + if (!(lookup->bitmask[i/32] & (1UL<<(i & 31)))) + { + lookup->table[i]= lookup->function (ub.f, lookup->data); + lookup->bitmask[i/32] |= (1UL<<(i & 31)); } - return lookup->table[i]; + return lookup->table[i-1] * (1.0f-dx) + + lookup->table[i] * (dx); + } + else + { + return lookup->table[i-1]; + } + } } static BablLookup * @@ -124,10 +154,12 @@ babl_lookup_new (BablLookupFunction function, else if (precision <= 0.000040) shift = 10; else if (precision <= 0.000081) shift = 11; else if (precision <= 0.000161) shift = 12; + else if (precision <= 0.000200) shift = 13; else if (precision <= 0.000324) shift = 14; else if (precision <= 0.000649) shift = 15; else shift = 16; /* a bit better than 8bit sRGB quality */ + /* Adjust slightly away from 0.0, saving many entries close to 0, this * causes lookups very close to zero to be passed directly to the * function instead. @@ -215,6 +247,9 @@ babl_lookup_new (BablLookupFunction function, lookup->function = function; lookup->data = data; + lookup->entries = (positive_max-positive_min)+ + (negative_max-negative_min); + return lookup; } @@ -222,7 +257,7 @@ static BablLookup *fast_pow = NULL; static inline float core_lookup (float val, void *userdata) { - return linear_to_gamma_2_2 (val); + return babl_linear_to_gamma_2_2f (val); } static float @@ -231,12 +266,11 @@ linear_to_gamma_2_2_lut (float val) return babl_lookup (fast_pow, val); } - static BablLookup *fast_rpow = NULL; static inline float core_rlookup (float val, void *userdata) { - return gamma_2_2_to_linear (val); + return babl_gamma_2_2_to_linearf (val); } static float @@ -264,15 +298,164 @@ conv_rgbaF_linear_rgbAF_gamma (unsigned char *src, while (n--) { - float alpha = fsrc[3]; - *fdst++ = linear_to_gamma_2_2_lut (*fsrc++) * alpha; - *fdst++ = linear_to_gamma_2_2_lut (*fsrc++) * alpha; - *fdst++ = linear_to_gamma_2_2_lut (*fsrc++) * alpha; - *fdst++ = *fsrc++; + float red = *fsrc++; + float green = *fsrc++; + float blue = *fsrc++; + float alpha = *fsrc++; + if (alpha == 1.0) + { + *fdst++ = linear_to_gamma_2_2_lut (red); + *fdst++ = linear_to_gamma_2_2_lut (green); + *fdst++ = linear_to_gamma_2_2_lut (blue); + *fdst++ = alpha; + } + else if (alpha == 0.0) + { + *fdst++ = 0.0; + *fdst++ = 0.0; + *fdst++ = 0.0; + *fdst++ = 0.0; + } + else + { + *fdst++ = linear_to_gamma_2_2_lut (red) * alpha; + *fdst++ = linear_to_gamma_2_2_lut (green) * alpha; + *fdst++ = linear_to_gamma_2_2_lut (blue) * alpha; + *fdst++ = alpha; + } + } + return samples; +} + + + +static INLINE long +conv_rgbaF_linear_rgba8_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + uint8_t *cdst = (uint8_t *) dst; + int n = samples; + + while (n--) + { + float red = *fsrc++; + float green = *fsrc++; + float blue = *fsrc++; + float alpha = *fsrc++; + if (alpha <= 0) /* XXX: we need to drop alpha!! ? */ + { + *cdst++ = 0; + *cdst++ = 0; + *cdst++ = 0; + *cdst++ = 0; + } + else + { + int val = linear_to_gamma_2_2_lut (red) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (green) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (blue) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = alpha * 0xff + 0.5; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + } + } + return samples; +} + +static INLINE long +conv_rgbaF_linear_rgbA8_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + uint8_t *cdst = (uint8_t *) dst; + int n = samples; + + while (n--) + { + float red = *fsrc++; + float green = *fsrc++; + float blue = *fsrc++; + float alpha = *fsrc++; + if (alpha >= 1.0) + { + int val = linear_to_gamma_2_2_lut (red) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (green) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (blue) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + *cdst++ = 0xff; + } + else if (alpha <= 0.0) + { + *((uint32_t*)(cdst))=0; + cdst+=4; + } + else + { + float balpha = alpha * 0xff; + int val = linear_to_gamma_2_2_lut (red) * balpha + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (green) * balpha + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (blue) * balpha + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + *cdst++ = balpha + 0.5f; + } } return samples; } +static long +conv_rgbaF_linear_rgbA8_gamma_cairo (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + unsigned char *cdst = (unsigned char *) dst; + int n = samples; + + while (n--) + { + float red = *fsrc++; + float green = *fsrc++; + float blue = *fsrc++; + float alpha = *fsrc++; + if (alpha >= 1.0) + { + int val = linear_to_gamma_2_2_lut (blue) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (green) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (red) * 0xff + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + *cdst++ = 0xff; + } + else if (alpha <= 0.0) + { + *((uint32_t*)(cdst))=0; + cdst+=4; + } + else + { + float balpha = alpha * 0xff; + int val = linear_to_gamma_2_2_lut (blue) * balpha + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (green) * balpha + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + val = linear_to_gamma_2_2_lut (red) * balpha + 0.5f; + *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val; + *cdst++ = balpha + 0.5f; + } + } + return samples; +} + static INLINE long conv_rgbAF_linear_rgbAF_gamma (unsigned char *src, unsigned char *dst, @@ -284,29 +467,31 @@ conv_rgbAF_linear_rgbAF_gamma (unsigned char *src, while (n--) { - float alpha = fsrc[3]; + float red = *fsrc++; + float green = *fsrc++; + float blue = *fsrc++; + float alpha = *fsrc++; if (alpha < BABL_ALPHA_THRESHOLD) { *fdst++ = 0.0; *fdst++ = 0.0; *fdst++ = 0.0; *fdst++ = 0.0; - fsrc+=4; } else if (alpha >= 1.0) { - *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); - *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); - *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + *fdst++ = linear_to_gamma_2_2_lut (red); + *fdst++ = linear_to_gamma_2_2_lut (green); + *fdst++ = linear_to_gamma_2_2_lut (blue); *fdst++ = *fsrc++; } else { float alpha_recip = 1.0 / alpha; - *fdst++ = linear_to_gamma_2_2_lut (*fsrc++ * alpha_recip) * alpha; - *fdst++ = linear_to_gamma_2_2_lut (*fsrc++ * alpha_recip) * alpha; - *fdst++ = linear_to_gamma_2_2_lut (*fsrc++ * alpha_recip) * alpha; - *fdst++ = *fsrc++; + *fdst++ = linear_to_gamma_2_2_lut (red * alpha_recip) * alpha; + *fdst++ = linear_to_gamma_2_2_lut (green * alpha_recip) * alpha; + *fdst++ = linear_to_gamma_2_2_lut (blue * alpha_recip) * alpha; + *fdst++ = alpha; } } return samples; @@ -427,6 +612,25 @@ init (void) babl_component ("B'a"), babl_component ("A"), NULL); + + const Babl *rgbA8_gamma = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("u8"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + + const Babl *rgba8_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbF_linear = babl_format_new ( babl_model ("RGB"), babl_type ("float"), @@ -446,10 +650,11 @@ init (void) float f; float a; - fast_pow = babl_lookup_new (core_lookup, NULL, 0.0, 1.0, 0.0001); - fast_rpow = babl_lookup_new (core_rlookup, NULL, 0.0, 1.0, 0.0001); + /* tweaking the precision - does impact speed.. */ + fast_pow = babl_lookup_new (core_lookup, NULL, 0.0, 1.0, 0.000199); + fast_rpow = babl_lookup_new (core_rlookup, NULL, 0.0, 1.0, 0.000250); - for (f = 0.0; f < 1.0; f+= 0.00001) + for (f = 0.0; f < 1.0; f+= 0.0000001) { a = linear_to_gamma_2_2_lut (f); a = gamma_2_2_to_linear_lut (f); @@ -459,13 +664,41 @@ init (void) } + + { + const Babl *f32 = babl_format_new ( + "name", "cairo-ARGB32", + babl_model ("R'aG'aB'aA"), + babl_type ("u8"), + babl_component ("B'a"), + babl_component ("G'a"), + babl_component ("R'a"), + babl_component ("A"), + NULL + ); + + + babl_conversion_new (rgbaF_linear, f32, "linear", conv_rgbaF_linear_rgbA8_gamma_cairo, NULL); + } + + o (rgbaF_linear, rgbA8_gamma); o (rgbAF_linear, rgbAF_gamma); o (rgbaF_linear, rgbAF_gamma); o (rgbaF_linear, rgbaF_gamma); + o (rgbaF_linear, rgba8_gamma); o (rgbaF_gamma, rgbaF_linear); - o (rgbF_linear, rgbF_gamma); - o (rgbF_gamma, rgbF_linear); + o (rgbF_linear, rgbF_gamma); + o (rgbF_gamma, rgbF_linear); return 0; } +void destroy (void); + +void +destroy (void) +{ + free (fast_rpow); + free (fast_pow); +} + diff --git a/extensions/float.c b/extensions/float.c index 5cbbeb6..9460804 100644 --- a/extensions/float.c +++ b/extensions/float.c @@ -41,9 +41,9 @@ conv_rgbaF_linear_rgbAF_gamma (unsigned char *src, while (n--) { float alpha = fsrc[3]; - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++) * alpha; - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++) * alpha; - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++) * alpha; + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++) * alpha; + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++) * alpha; + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++) * alpha; *fdst++ = *fsrc++; } return samples; @@ -71,17 +71,17 @@ conv_rgbAF_linear_rgbAF_gamma (unsigned char *src, } else if (alpha >= 1.0) { - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++); *fdst++ = *fsrc++; } else { float alpha_recip = 1.0 / alpha; - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++ * alpha_recip) * alpha; - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++ * alpha_recip) * alpha; - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++ * alpha_recip) * alpha; + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++ * alpha_recip) * alpha; + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++ * alpha_recip) * alpha; + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++ * alpha_recip) * alpha; *fdst++ = *fsrc++; } } @@ -99,9 +99,9 @@ conv_rgbaF_linear_rgbaF_gamma (unsigned char *src, while (n--) { - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++); *fdst++ = *fsrc++; } return samples; @@ -118,9 +118,9 @@ conv_rgbF_linear_rgbF_gamma (unsigned char *src, while (n--) { - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); - *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2f (*fsrc++); } return samples; } @@ -137,9 +137,9 @@ conv_rgbaF_gamma_rgbaF_linear (unsigned char *src, while (n--) { - *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); - *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); - *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++); *fdst++ = *fsrc++; } return samples; @@ -156,9 +156,9 @@ conv_rgbF_gamma_rgbF_linear (unsigned char *src, while (n--) { - *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); - *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); - *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linearf (*fsrc++); } return samples; } diff --git a/extensions/gegl-fixups.c b/extensions/gegl-fixups.c index c1f91ca..c32968c 100644 --- a/extensions/gegl-fixups.c +++ b/extensions/gegl-fixups.c @@ -181,7 +181,7 @@ conv_F_8g (unsigned char *src, unsigned char *dst, long samples) } -static INLINE long +static INLINE long __attribute__((unused)) conv_8_F (unsigned char *src, unsigned char *dst, long samples) { long n = samples; @@ -226,7 +226,7 @@ conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples) } -static INLINE long +static INLINE long __attribute__((unused)) conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples) { long n = samples; @@ -258,14 +258,14 @@ conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples) #define conv_rgbaF_rgbP8 conv_rgbaF_rgba8 -static INLINE long +static INLINE long __attribute__((unused)) conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples) { conv_F_8g (src, dst, samples * 3); return samples; } -static INLINE long +static INLINE long __attribute__((unused)) conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples) { conv_F_8 (src, dst, samples * 2); @@ -381,7 +381,6 @@ conv_bgrA8_rgba8 (unsigned char *srcc, return samples; } - static long conv_rgbaF_rgbAF (unsigned char *srcc, unsigned char *dstc, @@ -404,7 +403,6 @@ conv_rgbaF_rgbAF (unsigned char *srcc, return samples; } - static long conv_rgbAF_rgbaF (unsigned char *srcc, unsigned char *dstc, @@ -433,7 +431,6 @@ conv_rgbAF_rgbaF (unsigned char *srcc, } - static long conv_rgbAF_lrgba8 (unsigned char *srcc, unsigned char *dstc, @@ -490,7 +487,6 @@ init (void) babl_component ("A"), NULL); - const Babl *gamma_rgbaF = babl_format_new ( babl_model ("R'G'B'A"), babl_type ("float"), @@ -554,8 +550,8 @@ init (void) o (gamma_rgbAF, gamma_rgbaF); o (rgbAF, lrgba8); - o (rgb8, rgbaF); - o (rgb8, rgbAF); + o (rgb8, rgbaF); + o (rgb8, rgbAF); o (rgba8, rgbaF); o (rgbaF, rgb8); o (rgbAF, rgb8); diff --git a/extensions/gggl-lies.c b/extensions/gggl-lies.c index 22d0fee..5d50f5b 100644 --- a/extensions/gggl-lies.c +++ b/extensions/gggl-lies.c @@ -46,8 +46,6 @@ * need this piece of code for projects where GPL compatibility * was a must. * - * TODO: error diffusion, - * gamma correction (not really,. gamma correction belongs in seperate ops,. */ static long @@ -635,7 +633,7 @@ conv_rgbA8_rgba8 (unsigned char *src, unsigned char *dst, long samples) } else { - unsigned int aa = ((255 << 16) + (src[3] >> 1)) / src[3]; + unsigned int aa = ((255 << 16) - 255) / src[3]; *dst++ = (src[0] * aa + 0x8000) >> 16; *dst++ = (src[1] * aa + 0x8000) >> 16; *dst++ = (src[2] * aa + 0x8000) >> 16; diff --git a/extensions/gggl.c b/extensions/gggl.c index 7ab4400..c4b8ce4 100644 --- a/extensions/gggl.c +++ b/extensions/gggl.c @@ -755,7 +755,7 @@ conv_rgb8_rgba8 (unsigned char *src, unsigned char *dst, long samples) long n = samples-1; while (n--) { - *(unsigned int *) dst = (*(unsigned int *) src) | (255 << 24); + *(unsigned int *) dst = (*(unsigned int *) src) | (255UL << 24); src += 3; dst += 4; } diff --git a/extensions/sse2-float.c b/extensions/sse2-float.c index 8148bf2..72463ee 100644 --- a/extensions/sse2-float.c +++ b/extensions/sse2-float.c @@ -244,7 +244,7 @@ conv_rgbAF_linear_rgbaF_linear_spin (const float *src, float *dst, long samples) #define FLT_MANTISSA (1<<23) static inline __v4sf -init_newton (__v4sf x, double exponent, double c0, double c1, double c2) +sse_init_newton (__v4sf x, double exponent, double c0, double c1, double c2) { double norm = exponent*M_LN2/FLT_MANTISSA; __v4sf y = _mm_cvtepi32_ps((__m128i)((__v4si)x - splat4i(FLT_ONE))); @@ -252,10 +252,10 @@ init_newton (__v4sf x, double exponent, double c0, double c1, double c2) } static inline __v4sf -pow_1_24 (__v4sf x) +sse_pow_1_24 (__v4sf x) { __v4sf y, z; - y = init_newton (x, -1./12, 0.9976800269, 0.9885126933, 0.5908575383); + y = sse_init_newton (x, -1./12, 0.9976800269, 0.9885126933, 0.5908575383); x = _mm_sqrt_ps (x); /* newton's method for x^(-1/6) */ z = splat4f (1.f/6.f) * x; @@ -265,10 +265,10 @@ pow_1_24 (__v4sf x) } static inline __v4sf -pow_24 (__v4sf x) +sse_pow_24 (__v4sf x) { __v4sf y, z; - y = init_newton (x, -1./5, 0.9953189663, 0.9594345146, 0.6742970332); + y = sse_init_newton (x, -1./5, 0.9953189663, 0.9594345146, 0.6742970332); /* newton's method for x^(-1/5) */ z = splat4f (1.f/5.f) * x; y = splat4f (6.f/5.f) * y - z * ((y*y*y)*(y*y*y)); @@ -280,7 +280,7 @@ pow_24 (__v4sf x) static inline __v4sf linear_to_gamma_2_2_sse2 (__v4sf x) { - __v4sf curve = pow_1_24 (x) * splat4f (1.055f) - splat4f (0.055f); + __v4sf curve = sse_pow_1_24 (x) * splat4f (1.055f) - splat4f (0.055f); __v4sf line = x * splat4f (12.92f); __v4sf mask = _mm_cmpgt_ps (x, splat4f (0.003130804954f)); return _mm_or_ps (_mm_and_ps (mask, curve), _mm_andnot_ps (mask, line)); @@ -289,7 +289,7 @@ linear_to_gamma_2_2_sse2 (__v4sf x) static inline __v4sf gamma_2_2_to_linear_sse2 (__v4sf x) { - __v4sf curve = pow_24 ((x + splat4f (0.055f)) * splat4f (1/1.055f)); + __v4sf curve = sse_pow_24 ((x + splat4f (0.055f)) * splat4f (1/1.055f)); __v4sf line = x * splat4f (1/12.92f); __v4sf mask = _mm_cmpgt_ps (x, splat4f (0.04045f)); return _mm_or_ps (_mm_and_ps (mask, curve), _mm_andnot_ps (mask, line)); diff --git a/extensions/two-table.c b/extensions/two-table.c index 5c67ad6..6be18ca 100644 --- a/extensions/two-table.c +++ b/extensions/two-table.c @@ -116,6 +116,37 @@ conv_rgbafloat_linear_rgbu8_gamma (unsigned char *src_char, return samples; } + +static long +conv_rgbafloat_linear_rgbau8_gamma (unsigned char *src_char, + unsigned char *dst, + long samples) +{ + long n = samples; + float *src = (float*)src_char; + + while (n--) + { + if (src[3] <=0) + { + dst[0] = 0; + dst[1] = 0; + dst[2] = 0; + dst[3] = 0; + } + else + { + dst[0] = conv_float_u8_two_table_map (src[0]); + dst[1] = conv_float_u8_two_table_map (src[1]); + dst[2] = conv_float_u8_two_table_map (src[2]); + dst[3] = src[3] * 0xff + 0.5; + } + src += 4; + dst += 4; + } + return samples; +} + static long conv_rgbfloat_linear_rgbu8_gamma (unsigned char *src_char, unsigned char *dst, @@ -211,6 +242,12 @@ init (void) conv_rgbafloat_linear_rgbu8_gamma, NULL); + babl_conversion_new (babl_format ("RGBA float"), + babl_format ("R'G'B'A u8"), + "linear", + conv_rgbafloat_linear_rgbau8_gamma, + NULL); + babl_conversion_new (babl_format ("RGB float"), babl_format ("R'G'B' u8"), "linear", diff --git a/install-sh b/install-sh index 0b0fdcb..59990a1 100755 --- a/install-sh +++ b/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2013-12-25.23; # UTC +scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -324,34 +324,41 @@ do # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) + # $RANDOM is not portable (e.g. dash); use it when possible to + # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + # As "mkdir -p" follows symlinks and we work in /tmp possibly; so + # create the $tmpdir first (and fail if unsuccessful) to make sure + # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi - rmdir "$tmpdir/d" "$tmpdir" + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; diff --git a/ltmain.sh b/ltmain.sh index 0f0a2da..a736cf9 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.6 +VERSION="2.4.6 Debian-2.4.6-2" package_revision=2.4.6 @@ -2068,12 +2068,12 @@ include the following information: compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.6 + version: $progname $scriptversion Debian-2.4.6-2 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . -GNU libtool home page: . +GNU libtool home page: . General help using GNU software: ." exit 0 } @@ -7272,10 +7272,13 @@ func_mode_link () # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" @@ -7568,7 +7571,10 @@ func_mode_link () case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then @@ -7887,19 +7893,19 @@ func_mode_link () # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done continue fi # $pass = conv @@ -8823,6 +8829,9 @@ func_mode_link () revision=$number_minor lt_irix_increment=no ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; esac ;; no) diff --git a/m4/libtool.m4 b/m4/libtool.m4 index a644432..ee80844 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -728,7 +728,6 @@ _LT_CONFIG_SAVE_COMMANDS([ cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. @@ -2867,9 +2866,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # before this can be enabled. hardcode_into_libs=yes - # Add ABI-specific directories to the system library path. - sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" - # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command @@ -2878,7 +2874,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -2890,6 +2886,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -3549,7 +3557,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd*) +netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else @@ -4427,7 +4435,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -4939,6 +4947,9 @@ m4_if([$1], [CXX], [ ;; esac ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -5001,6 +5012,9 @@ dnl Note also adjust exclude_expsyms for C++ above. openbsd* | bitrig*) with_gnu_ld=no ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes @@ -5255,7 +5269,7 @@ _LT_EOF fi ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -5776,6 +5790,7 @@ _LT_EOF if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi + _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -5797,7 +5812,7 @@ _LT_EOF esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else diff --git a/tests/Makefile.am b/tests/Makefile.am index 6e282af..f7cf1f7 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -42,7 +42,6 @@ EXTRA_DIST=common.inc noinst_PROGRAMS = \ introspect \ babl_fish_path_fitness \ - babl_fish_path_dhtml \ babl-html-dump \ conversions \ formats \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 5836a12..5459d39 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -91,8 +91,8 @@ host_triplet = @host@ target_triplet = @target@ TESTS = $(am__EXEEXT_2) noinst_PROGRAMS = introspect$(EXEEXT) babl_fish_path_fitness$(EXEEXT) \ - babl_fish_path_dhtml$(EXEEXT) babl-html-dump$(EXEEXT) \ - conversions$(EXEEXT) formats$(EXEEXT) $(am__EXEEXT_2) + babl-html-dump$(EXEEXT) conversions$(EXEEXT) formats$(EXEEXT) \ + $(am__EXEEXT_2) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ @@ -132,12 +132,6 @@ babl_class_name_LDADD = $(LDADD) babl_class_name_DEPENDENCIES = \ $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -babl_fish_path_dhtml_SOURCES = babl_fish_path_dhtml.c -babl_fish_path_dhtml_OBJECTS = babl_fish_path_dhtml.$(OBJEXT) -babl_fish_path_dhtml_LDADD = $(LDADD) -babl_fish_path_dhtml_DEPENDENCIES = \ - $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) babl_fish_path_fitness_SOURCES = babl_fish_path_fitness.c babl_fish_path_fitness_OBJECTS = babl_fish_path_fitness.$(OBJEXT) babl_fish_path_fitness_LDADD = $(LDADD) @@ -302,15 +296,14 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = babl-html-dump.c babl_class_name.c babl_fish_path_dhtml.c \ - babl_fish_path_fitness.c cairo-RGB24.c \ - concurrency-stress-test.c conversions.c extract.c \ - float-to-8bit.c floatclamp.c formats.c grayscale_to_rgb.c \ - hsl.c hsva.c introspect.c models.c n_components.c \ - n_components_cast.c nop.c palette.c rgb_to_bgr.c \ - rgb_to_ycbcr.c sanity.c srgb_to_lab_u8.c types.c +SOURCES = babl-html-dump.c babl_class_name.c babl_fish_path_fitness.c \ + cairo-RGB24.c concurrency-stress-test.c conversions.c \ + extract.c float-to-8bit.c floatclamp.c formats.c \ + grayscale_to_rgb.c hsl.c hsva.c introspect.c models.c \ + n_components.c n_components_cast.c nop.c palette.c \ + rgb_to_bgr.c rgb_to_ycbcr.c sanity.c srgb_to_lab_u8.c types.c DIST_SOURCES = babl-html-dump.c babl_class_name.c \ - babl_fish_path_dhtml.c babl_fish_path_fitness.c cairo-RGB24.c \ + babl_fish_path_fitness.c cairo-RGB24.c \ concurrency-stress-test.c conversions.c extract.c \ float-to-8bit.c floatclamp.c formats.c grayscale_to_rgb.c \ hsl.c hsva.c introspect.c models.c n_components.c \ @@ -683,6 +676,7 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ @@ -776,10 +770,6 @@ babl_class_name$(EXEEXT): $(babl_class_name_OBJECTS) $(babl_class_name_DEPENDENC @rm -f babl_class_name$(EXEEXT) $(AM_V_CCLD)$(LINK) $(babl_class_name_OBJECTS) $(babl_class_name_LDADD) $(LIBS) -babl_fish_path_dhtml$(EXEEXT): $(babl_fish_path_dhtml_OBJECTS) $(babl_fish_path_dhtml_DEPENDENCIES) $(EXTRA_babl_fish_path_dhtml_DEPENDENCIES) - @rm -f babl_fish_path_dhtml$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(babl_fish_path_dhtml_OBJECTS) $(babl_fish_path_dhtml_LDADD) $(LIBS) - babl_fish_path_fitness$(EXEEXT): $(babl_fish_path_fitness_OBJECTS) $(babl_fish_path_fitness_DEPENDENCIES) $(EXTRA_babl_fish_path_fitness_DEPENDENCIES) @rm -f babl_fish_path_fitness$(EXEEXT) $(AM_V_CCLD)$(LINK) $(babl_fish_path_fitness_OBJECTS) $(babl_fish_path_fitness_LDADD) $(LIBS) @@ -876,7 +866,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-html-dump.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl_class_name.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl_fish_path_dhtml.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl_fish_path_fitness.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-RGB24.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/concurrency-stress-test.Po@am__quote@ diff --git a/tests/babl_fish_path_dhtml.c b/tests/babl_fish_path_dhtml.c deleted file mode 100644 index b9bcadf..0000000 --- a/tests/babl_fish_path_dhtml.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "config.h" -#include -#include "babl-internal.h" - -int main (void) -{ - babl_init (); - - babl_set_extender (babl_extension_quiet_log ()); - babl_fish_stats (stdout); - - babl_exit (); - - return 0; -} diff --git a/tests/babl_fish_path_fitness.c b/tests/babl_fish_path_fitness.c index 7ac4f26..93e1287 100644 --- a/tests/babl_fish_path_fitness.c +++ b/tests/babl_fish_path_fitness.c @@ -84,16 +84,58 @@ int main (void) babl_set_extender (babl_extension_quiet_log ()); babl_format_class_for_each (source_each, NULL); + { int i; - for (i = 0; i < babl_formats_count (); i++) printf ("|");printf ("\n"); - for (i = 0; i < babl_formats_count (); i++) if (i / 100 == 0) printf ("|");else printf ("%i", (i / 100) % 10);printf ("\n"); - for (i = 0; i < babl_formats_count (); i++) if (i / 10 == 0) printf ("|");else printf ("%i", (i / 10) % 10);printf ("\n"); - /* for (i=0;i +#include +#include "babl/babl.h" + +int main (int argc, char **argv) +{ + if (argc != 3) + { + fprintf (stderr, "need two args, from and to babl-formats\n"); + return -1; + } + putenv ("BABL_DEBUG_CONVERSIONS" "=" "1"); + putenv ("BABL_TOLERANCE" "=" "100000.0"); + babl_init (); + babl_fish (babl_format(argv[1]), babl_format (argv[2])); + babl_exit (); + + return 0; +} -- 2.30.2